Redis - 缓存雪崩、缓存击穿、缓存穿透

1、缓存雪崩

是指缓存中大量的 key 在同一时间失效,这时又有大量的请求进来,导致这些请求全部到了数据库层面,严重的情况,数据库奔溃;

解决方法:

  • 不设置失效时间,定时去刷新缓存;
  • 设置失效时间的时候加上一个随机数,让缓存不至于在同一时间集体失效;

 

2、缓存击穿

和缓存雪崩有点类似,但是也不一样,它是指缓存中的热点数据(就是被大量访问的 单个 key )突然失效,导致大量的对它的访问落到了数据库上,就像一个杯子被凿了一个洞一样;

解决方法:

  • 不设置失效时间;
  • 利用集群,将热定数据备份到不同的服务器上,并设置不同的失效时间,用户请求时利用匹配规则去不同的服务器上访问
  • 利用可重入互斥锁;

 

3、缓存穿透

一般是受到攻击时会出现的请求,用户大批量的发起请求,请求缓存和数据库中都没有的数据,导致数据库压力过大,最终崩溃;

解决方法:

  • 做好过滤一些显而易见的无效条件;
  • 缓存空值,这样一般重复的攻击也能在缓存中拦截,但是一般要设置失效时间,防止过多占用内存;
  • 利用 Redis 中的布隆过滤器(Bloom Filter)也可以解决,将数据库中的需要被查询的数据放入布隆过滤器中,利用他高效的查询判断出这个 key 是否在数据库中,不存在直接返回;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值