redis中,什么是缓存穿透和缓存雪崩?

1.什么是redis缓存穿透?如何避免

​ 一般的缓存系统,都是按照key去缓存查询,如果key不存在对应的value,就该去数据库中查找。一些恶意的请求就会故意查询不存在的key,请求量很大,就会对数据库造成很大的压力。这就叫缓存穿透。

如何避免?

​ (1)对查询结果为空的情况也进行缓存,将缓存的时间设置短一点,或者该key对应的数据插入过后进行清理缓存。

​ (2)对一定不存在的key进行过滤。可以将所有的可能存在的key放到一个大的BitMap中,查询时通过将该BitMap过滤。(布隆过滤器

2.什么是redis缓存雪崩 ?如何避免?

​ 当缓存服务器重启或者大量缓存集中在某一个时间段失效,,这样再时效的时候,会给数据库造成很大的压力。导致系统崩溃。

​ Redis挂掉了,请求全部走数据库。

​ 对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。
缓存雪崩如果发生了,很可能就把我们的数据库搞垮,导致整个服务瘫痪!

如何避免?

(1)在缓存失效后,通过加锁或者队列的来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询线程或写缓存,其他线程等待。

(2)不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

(3)对于“Redis挂掉了,请求全部走数据库”这种情况,我们可以有以下的思路:
事发前:实现Redis的高可用(主从架构+Sentinel(哨兵) 或者RedisCluster(集群)),尽量避免Redis挂掉这种情况发生。
事发中:万一Redis真的挂了,我们可以设置本地缓存(ehcache)+限流(hystrix),尽量避免我们的数据库被干掉(起码能保证我们的服务还是能正常工作的)
事发后:redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值