一 redis的缓存雪崩
1.1 缓存雪崩
在redis中,新,旧数据交替时候,旧数据进行了删除,新数据没有更新过来,造成在高并发环境下,大量请求查询redis没有数据,直接查询mysql,造成mysql的压力骤增,给mysql造成极大的压力,造成一连串的后续异常反应。
1.2 解决办法
1.大多数系统设计者考虑用加锁(最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写。
2.redis中的key设置永不过期;3.redis的集群实现高可用。主从+哨兵
二 缓存穿透
2.1 缓存穿透
在redis中,查询redis数据不存在,查询mysql也不存在,造成两次无用的查询。造成额外不必要的开销
2.2 解决办法
使用布隆过滤器,Bloom-Filter一般用于在大数据量的集合中判定某元素是否存在。最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
三 缓存击穿
3.1 缓存击穿
在redis中,一开始热点key,redis缓存,mysql中均可查询到,突然某种原因,key失效后,查询redis,mysql均不存在,造成请求大量访问mysql,存在mysql崩溃的风险。
3.2 解决办法
使用A,B双缓存,差异失效时间;更新时,先B后A,查询时,先A后B,解决热点key失效问题,造成缓存击穿。
四 总结