Cache
缓存击穿(某一cache失效,并发请求db)
- 互斥锁
- cache失效后,并发请求db时,用分布式锁限制并发访问db,比如查询一个商品的详情,就以商品ID之类的唯一标识来构建锁的粒度。在获取到锁之后doule check缓存,避免db重复相同的查询。
- 热点数据不过期
- 数据变更时,不要忘记删除缓存(db update成功后,优先删除cache + 本地重试,失败再走MQ异步补偿)
缓存穿透(cache没有,db也没有,误操作或恶意攻击)
- 布隆过滤器
- 在缓存层前加一个布隆过滤器(Bloom Filter),快速判断“某个 key 是否可能存在”。
- 空值缓存
- 当 DB 查询结果为空时,仍将这个 “空结果” 缓存一段时间(如 30~60 秒)。
- API 网关限流
- ip请求频率/token请求频率达到阈值,拒绝请求
缓存雪崩(整个cache层失效)
- 每个Key的过期时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效
- Redis 持久化 RDB+AOF
- 一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
- Redis 集群
Comments