Redis 缓存穿透 和缓存雪崩 以及缓存的内存淘汰策略

本文探讨了缓存穿透及其预防措施,包括设置空值缓存和使用布隆过滤器。接着,解释了缓存雪崩的原因及解决方案,如设置不同过期时间、多级缓存和使用第三方缓存。还详细介绍了Redis的缓存过期处理,包括定时删除和惰性删除策略,以及内存淘汰机制,如LRU和LFU策略。最后,讨论了内存满时Redis的处理方式。
摘要由CSDN通过智能技术生成
什么缓存穿透?
        查询的key在缓存中和数据库中都不存在,某些非法用户进行攻击,大量的请求会直接打在db上,从而造成db宕机,这就是缓存穿透。
如何预防缓存穿透?
        1.把缓存中不存在的key缓存起来,比如空字符串,空对象,空数据或者空list。(一般我们要这么干)
        2.通过布隆过滤器在实现。(只测试过)
什么是缓存雪崩?
       当缓存的中设置过过期的时间key在某个时间点上大面积失效,大量的请求会直接打在db上,从而造成数据库的宕机,这就是缓存雪崩。
如何预防缓存雪崩?
       1.设置缓存永不过期。
       2.缓存的过期时间错开。
       3.使用多级缓存,Redis 和 MemoryCache 配合使用。
       4.使用第三方缓存。**加粗样式**
Redis缓存过期处理与内存淘汰机制。
缓存过期处理分为两种模式:
       1.(主动)定时删除:Redis定时检查过期的key,并删除.(默认一秒钟检查10次,这个次数可以在redis.conf里面的hz属性设置)2.(被动)惰性删除:当请求过来取访问一个key时,Redis会对这个key判断是否过期,如果过期删除,返回一个nil。这种策略对cpu比较友好,不会有太多的损耗。但是内存占用比较高。
如果内存被Redis缓存占满了怎么办?内存占满了可以使用硬盘来保存,但是没有意义,因为硬盘没有内存块,会影响到Redis的性能,所以,当内存占满以后,redis提供一套淘汰机制:MEMORY MANAGEMENT
内存淘汰机制:
       #volatile-lru -> Evict using approximated LRU among the keys with an expire set.
       # allkeys-lru -> Evict any key using approximated LRU.
       # volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
       # allkeys-lfu -> Evict any key using approximated LFU.
       # volatile-random -> Remove a random key among the ones with an expire set.
       # allkeys-random -> Remove a random key, any key.
       # volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
       # noeviction -> Don't evict anything, just return an error on write operations.
       #
       # LRU means Least Recently Used(最少时间)
       # LFU means Least Frequently Used(最少次数)
注:以 volatile  开头的都是针对设置过过期时间的缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值