Redis缓存 雪崩,穿透,击穿(问题及解决)

大神,请问下,Redis缓存 雪崩,穿透,击穿(问题及解决)
最新回答
萌妹子

2024-09-03 07:05:25

缓存雪崩


在短时间内,大量缓存key过期,造成大量请求直接冲击数据库,导致数据库承受巨大压力,甚至崩溃。


解决方法:




  • 均匀设置key过期时间,避免大量key在短期内集中过期。




  • 对于访问频率极高的key,考虑不设置过期时间。




缓存击穿


面对高访问频率的热点数据,缓存未能处理请求,导致数据库瞬间承受大量压力。


解决方法:




  • 不为热点数据设置过期时间。




  • 引入互斥锁机制,确保单线程访问数据库并更新缓存,避免重复操作。




缓存穿透


查询数据既不在缓存,也不在数据库中,导致请求连续冲击数据库,加大压力。


解决方法:




  • 缓存空值或预设值,即使结果为空,也进行缓存,设置较短过期时间。




  • 使用布隆过滤器快速判断数据存在性,减少数据库查询压力。




布隆过滤器原理


布隆过滤器是一种概率数据结构,能判断一个元素是否存在于集合中。存在误判率,但不存在数据误判的情况。


布隆过滤器特性




  • 使用多个哈希函数,降低冲突率。




  • 误判率取决于位数组长度和哈希函数数量,但确保真正不存在的数据不会被误判为存在。




布隆过滤器应用


快速判断数据库中数据的有无,避免频繁查询数据库,有效缓解数据库压力。