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

缓存穿透:缓存没有 数据库也没有,发起查找id不存在的请求
这时的用户很可能是攻击者,攻击会导致数据库压力过大。
当我们从数据库找不到的时候,我们也将这个空对象设置到缓存里边去,下次再请求的时候,就可以从缓存里边获取了,这种情况我们一般会将空对象设置一个较短的过期时间。
加强安全模块,减少这样的攻击

缓存击穿:缓存中没有数据,数据库中有数据,统一时刻并发访问这一条数据。
这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数
据库压力瞬间增大,造成过大压力。
数据库连接池可以控制并发,你来再多也没有用,我连接池就这些连接
当并发量超过一定的阈值,开始加锁读取数据库。

缓存雪崩:缓存中的数据同时到期或者缓存中间件挂掉,导致请求全部走数据库。
缓存雪崩如果发生了,很可能就把我们的数据库搞垮,导致整个服务瘫痪
在缓存的时候给过期时间加上一个随机值,这样就会大幅度的减少缓存在同一时间过期。
对于“Redis挂掉了,请求全部走数据库”这种情况,可以有以下的思路:大量请求直接走数据库,数据库压力变大,执行时间变长,触发降级方法,每秒内多少次降级触发熔断。保证数据库不会挂掉。redis高可用,挂了赶快使用rdb和aof恢复。
事发前:实现Redis的高可用(主从架构+Sentinel(哨兵) 或者Redis Cluster(集群)),尽量避免Redis挂掉这种情况发生。
事发中:万一Redis真的挂了,我们可以设置本地缓存(ehcache)+限流(hystrix)+降级+熔断,尽量避免我们的数据库被干掉(起码能保证我们的服务还是能正常工作的)
事发后:redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值