分布式缓存Redis的穿透和雪崩

编程

缓存击穿

先了解一下缓存击穿,大量的请求都集中请求在一个 key 上 ,一般体现在一个热点数据,例如双十一,秒杀等,突然一下缓存失效了,所有的请求一瞬间就砸到了MySQL上面。持续的并发就穿破的缓存。总结一下,在某个key过期的瞬间,有大量的并发请求,一般都是热点数据,缓存过期。

解决方案

1、设置热点数据延长过期时间

从缓存层面来说,没有设置过期时间,就不会产生穿透问题。例如,一般秒杀时间1分钟,缓存可以考虑设置2分钟。

2、加互斥锁

分布式锁:只要加了锁,可以保证每个key,只有一个线程去查询后端的服务。只能够等待。

核心:转移压力,尽量服务不崩。 将数据库承受的压力转义到了分布式锁上面。

缓存穿透

出现大量请求,缓存都没有命中,所有的请求最终还是给了数据库持久层,这就是缓存穿透!

解决方案:

  1. 当请求到数据库查出值的值不为空,将该(key,value)放到redis
  2. 当请求到数据库查出值的值为空,将该(key,value)放到redis中,value为空,并设置过期时间。

Redis雪崩

什么是Redis雪崩

  • 雪崩是基于数据库,所有原来应该到Redis的查询全到DB,并且是同时到达

  • 缓存在同一时间大量的key过期

  • 多个用户同时请求并到达数据,而且这个请求只有一个是有意义的,其他的都是重复无用功

Redis雪崩解决方案

  • 缓存用不过期:这样会导致冰封

  • 过期时间错开(可以在key创建时加入一个1-10分钟的随机数给到key)

  • 多缓存数据结合(不要直接打到DB上,可以在DB上再加一个搜索引擎)

  • 在代码里通过锁解决(synchronized,分布式锁zookeeper)

缓存击穿体现在一个点,缓存雪崩体现在一个面,击穿也是属于雪崩的一种,是一种特例。

 

 

以上是 分布式缓存Redis的穿透和雪崩 的全部内容, 来源链接: utcz.com/z/516763.html

回到顶部