Redis缓存雪崩、穿透、击穿

 正常流程

 执行流程图

 缓存击穿

 解决方案

1.永不过期:

可以将一些可以预料到的热门商品设置为永不过期,将一些冷门商品设置过期时间,冷门商品在一定时间内访问量激增的时候修改过期时间为永不过期

2.加锁排队:

在缓存突然失效时,只允许一个线程进入redis查询数据,redis中没有数据便从数据库中查询并设置到redis中,后面的线程再进入就会从redis中获取数据

 缓存雪崩

 解决方案

1.随机失效时间(针对缓存集中过期的解决方案)

 

2.提前给redis做好集群,做好哨兵模式(服务器宕机)

3.做好多机房(服务器突然断电 )

缓存穿透

按照正常程序的执行流程不会造成缓存穿透,只有在大量的请求访问不存在的数据,或者恶意攻击时,才会造成缓存穿透。

 解决方案

1.参数校验

负数或者无效参数给过滤掉,但是不能完全的杜绝。

2.缓存空对象

在缓存击穿和缓存雪崩的基础上,不管数据库有没有这个数据,都存入到redis中,并设置随机过期时间(既能防雪崩,又能防穿透)

 3.布隆过滤器  

说白了就是一种数据结构,比list、set、map更加的高效,并且占用的空间更少

猜你喜欢

转载自blog.csdn.net/xzxailh/article/details/128994758