redis缓存 雪崩、穿透、击穿

缓存雪崩

  • redis挂掉
  • 缓存同时过期失效
    解决方案:
    (1)事发前:实现Redis的高可用(主从架构+Sentinel(哨兵) 或者Redis Cluster(集群))
    事发中:万一Redis真的挂了,我们可以设置本地缓存(ehcache)+限流(hystrix),尽量避免我们的数据库被干掉(起码能保证我们的服务还是能正常工作的)
    事发后:redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据
    (2)redis key过期时间不要相同(快速恢复)

缓存穿透

缓存穿透是指查询一个一定不存在的数据。由于缓存不命中,并且出于容错考虑,如果从数据库查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,失去了缓存的意义。

  • 缓存中没有,数据库中也没有
    解决方法:
    (1)布隆过滤器
    (2)数据库中查不到在redis中设置空值,设置很短过期时间(一般不超过5分钟)

缓存击穿

某个key在某个时间点被超高并发访问,“热点”数据

  • 缓存中没有,数据库有
    解决方法:分布式锁 -> 保证只有一个线程访问数据库

redis 数据过期策略
缓存与数据库数据一致性
redis 持久化策略 RDB

Redis系列教程(三):如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容