缓存雪崩
定义:缓存中如果大量缓存在一段时间内集中过期了,这时候会发生大量的缓存击穿现象,所有的请求都落在了DB上,由于查询数据量巨大,引起DB压力过大甚至导致DB宕机 。
解决方案:缓存雪崩一般没有完美解决的方法,但是我们可以尽量分析用户行为,尽量保证key的失效时间比较平均,防止同一时间出现大量缓存数据同时过期的现象,并且设置热点数据永不过期 。同时如果为分布式环境下,使用分布式锁来保证缓存的单线程写,这样可以避免同一时间大量缓存失效导致请求全部落在DB上 。而我觉得如果可以接受有些请求拿到过期值,最合理的方案实际上就是使用缓存击穿的方案:Redis中的数据不设置过期时间,然后在缓存的对象上添加一个属性标识过期时间,每次获取到数据时,校验对象中的过期时间属性,如果数据即将过期,则异步发起一个线程主动更新缓存中的数据 。
推荐阅读
- Redis键管理
- Redis:从认识安装到实现CURD
- php结合Redis实现投票项目并实时查看到投票情况
- 阿里云的redis规范
- Redis原理分享,从使用到会用
- Redis布隆过滤器
- 微服务架构中缓存模式
- Redis哈希类型
- 你知道 Redis数据结构底层实现吗?一文详解,彻底弄懂
- redis实现网关限流