关于Redis缓存穿透、缓存击穿和雪崩问题

缓存穿透:

当访问一个redis和数据库中并不存在的一个key值时,访问redis时并不能获取值随之访问数据库,此时数据库也无法查询该值。一般出现于对数据库的恶意访问,当短时间大量的访问不存在的值时容易导致数据库的崩溃。

解决方法:当第一次出现访问并不存在的值时,数据库可返回一个“null”值,则后续访问时redis就回给访问者返回一个“null”值。

 缓存击穿:

某一时刻,大量的访问已过期的缓存,因为redis中的缓存已过期转而访问数据库,导致数据库的压力增大,导致缓存击穿。

举极端例子:redis中有一亿个缓存刚好过期,恰好这时访问这一亿个key,因为过期转而访问数据库,由于短时间大量的访问导致数据库的压力剧增。

解决方法:给过期的key加锁,当访问第一个过期的key时不允许其他key的访问,并返回该key的value到redis以便第二次访问该key时不需要访问数据库。

Redis的雪崩 

当短时间访问的数据量大于redis的缓存量时所导致的Redis崩溃进而导致Redis的集群雪崩。

解决方法:给redis里面的key设置一个随机过期时间,使之不能同时过期。

注:如果redis的存储也是10000,恰好这时redis里的10000条数据都过期进而击穿访问数据库导致数据库崩溃而引起的雪崩,这属于是数据库的雪崩,并不是redis雪崩,因为这时的redis还是可以继续使用的。

博主才疏学浅,上述问题解决方法并非唯一,本文若有出入请联系博主,谢谢! 

--------续更

Redis的过期key如何处理!

Redis的过期key处理方式有两种:惰性处理、定期处理。

顾名思义,惰性处理就是当我们要查询这个key的时候,发现这个key过期了再清理这个key。当然如果遇到极端情况,比如有大批量的过期key未处理,这样就会占用内存空间,所以惰性处理会节省cpu的资源,但是会占用大量内存。

定期处理即每隔一定的时间,会扫描一定数量的key并清楚其中过期的key,通过定期扫描一定数量的key限定了时间,平衡优化了cpu和内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值