自学内容网 自学内容网

Redis 缓存击穿和缓存穿透、缓存雪崩是什么以及解决方案有哪些?

一、基本概念

(1)缓存穿透(Cache Penetration):指查询一个不存在的数据(缓存和数据库中都没有),由于缓存中没有数据,所以这个查询请求会直接穿过缓存层,到达数据库层,造成了数据库的压力。攻击者可以通过构造恶意请求,使得缓存层无法命中任何数据,从而导致请求直接访问数据库,从而引起数据库压力过大。

(2)缓存击穿(Cache Breakdown):指缓存中没有但数据库中有的数据,当缓存中某个热点数据失效,此时有大量并发请求同时访问这个失效的热点数据,导致这些请求直接访问数据库,造成数据库压力过大,甚至导致数据库溃。通常是由于缓存中某个热点数据过期失效, 同时有大量并发请求访问该数据。

(3)缓存雪崩(Cache Avalanche):指缓存中大量的数据提供是失效,导致大量请求直接访问数据库,造成数据库压力过大。通常是由于缓存中大量的数据在同一时间失效,导致大量请求直接访问数据库。

二、解决方案

(1)缓存穿透:

  1. 使用BloomFilter布隆过滤器,先检查数据是否存在。

  2. 如果查询结果为空,可以设置一个短暂的缓存,避免请求再次打到数据库。

(2)缓存击穿:

  1. 设置热点数据永不过期。

  2. 使用分布式锁,只有获取锁的节点可以查询数据库,其他节点等待。

  3. 提供一个能处理热点key的服务,预先加载数据。

(3)缓存雪崩:

  1. 不同的key设置不同的过期时间(例如设置过期时间为随机时间),分散缓存失效时间,避免在同一时间大量数据同时失效。

  2. 另外可以在缓存层和数据库层之间添加限流、熔断等措施,避免因突发流量导致系统崩溃。

  3. 实现Redis高可用,确保服务的可用性。

  4. 提前预热缓存,或者使用锁或队列控制缓存构建。


原文地址:https://blog.csdn.net/weixin_42188583/article/details/140203158

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