自学内容网 自学内容网

【redis】redis缓存异常

1. 缓存雪崩

定义:缓存雪崩是指缓存中大量请求未命中,导致请求直接访问数据库,数据库负荷增大,最终可能导致数据库崩溃,进而影响整个系统的可用性。

原因

  • 缓存服务不可用,如Redis宕机。
  • 大量KEY同时失效,如设置了相同的过期时间。

解决方案

  • 使用高可用的Redis部署方式:如哨兵模式或集群模式,防止Redis单点故障导致的缓存雪崩。
  • 设置不同的失效时间:避免大量key在同一时间失效。
  • 使用二级缓存:当一级缓存失效时,可以从二级缓存中获取数据,避免直接访问数据库。
  • 定时更新缓存失效时间:在访问缓存时,启动一个线程或异步任务来更新缓存的失效时间。
  • 设置永不过期:使用PERSIST key命令将key设置为永不过期,但这样会导致Redis的空间资源需求变大。

2. 缓存穿透

定义:缓存穿透是指用户查询一条数据时,数据库和缓存都没有该记录,导致缓存未命中,需要查询数据库获取数据。如果用户不断请求查询不存在的数据,就会对数据库造成巨大的压力。

原因

  • 非法请求或用户查询不存在的数据。

解决方案

  • 缓存空值:当缓存和数据库中都没有对应数据时,将空值存入缓存中,以减少重复查询空值所造成的额外压力。
  • 使用布隆过滤器:布隆过滤器是一个由布隆在1970年提出的算法,它以空间换时间的算法,通过多个哈希函数来判断一个元素是否可能存在于集合中。

3. 缓存击穿

定义:缓存击穿是指当缓存中的某个热点key过期时,大量请求同时访问该key,导致这些请求直接访问数据库并将查询结果回设到缓存中。高并发访问数据库可能会导致数据库崩溃。

原因

  • 热点key过期。

解决方案

  • 设置永不过期:如果所有的key都设置不失效,就不会出现因为KEY失效导致的缓存击穿问题。但这样会导致Redis的空间资源需求变大。
  • 设置随机失效时间:如果key的失效时间不相同,就不会在同一时刻失效,从而避免大量访问数据库的情况。
  • 使用二级缓存:二级缓存是使用两组缓存,一级缓存和二级缓存的失效时间不同,一级缓存失效时,可以从二级缓存中获取数据。
  • 异步更新缓存时间:每次访问缓存时,启动一个线程或建立一个异步任务来更新缓存的失效时间。
  • 分布式锁:使用分布式锁,同一时间只有1个请求可以访问到数据库,其他请求等待一段时间后,重复调用。

原文地址:https://blog.csdn.net/wosixiaokeai/article/details/140065620

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!