后端缓存的使用-问题-方案

Redis缓存:常见问题以及注意事项

更新策略

更DB, 删Cache

问题: 中间过程中, 可能会有其他进行获取Cache, 导致出现不一致

删缓存, 更DB

问题: 中间过程中, 可能会有其他进行获取Cache, 因为不存在缓存, 主动拉取, 导致DB与Cache出现不一致

延迟双删

删缓存, 更DB, 再删缓存.

引入了一个更多的操作, 最坏情况下有可能退化为方案1, 即在更新DB到第二次删缓存期间, 依然有可能引入不一致.

业务通用的思路

  1. 设置缓存过期时间, 控制不一致问题的影响范围.
  2. 如果追求强一致性, 可以考虑锁控制 以及分布式事务来处理, 复杂度稍高.

缓存穿透

定义

缓存穿透是指调用方查询一个不存在的数据时,由于在缓存不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致每次请求这个不存在的数据都要到数据库中去查询,从而给数据库带来压力。缓存穿透一般是由外部恶意攻击(爬虫等)引起的。

解决方案

  1. 非法请求的校验
  2. 缓存空对象
  3. 布隆过滤器

缓存雪崩

定义

缓存雪崩是指当大量缓存数据同时过期,瞬间访问数据库的流量陡增,导致数据库压力过大时直接崩溃,甚至数据库无法直接重启。

解决方案

  1. 预热
  2. 降级/兜底
  3. TTL 随机处理
  4. 如果不能接受数据库的大量请求, 可以设置TTL永不淘汰, 手动删除

缓存击穿

定义

缓存击穿是指热点key在某个时间点过期,而此时恰好服务收到对这个key的大量并发请求,缓存失效,进而增大数据库的压力。缓存击穿与缓存雪崩类似,不同之处在于缓存击穿是热点key过期,而缓存雪崩是不同数据同时过期。

解决方案

  1. 热点Key设置不过期
  2. 分布式锁控制实现串行化
posted @ 2024-03-22 21:14  pDJJq  阅读(5)  评论(0编辑  收藏  举报