Redis高性能缓存数据库面试题( 四 )


如何避免?

1:对查询结果为空的情况也进行缓存 , 缓存时间设置短一点 , 或者该 key 对应的数据 insert 了之后清理缓存 。
2:对一定不存在的 key 进行过滤 。可以把所有的可能存在的 key 放到一个大的 Bitmap 中 , 查询时通过该 bitmap 过滤 。
缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效 , 这样在失效的时候 , 会给后端系统带来很大压力 。导致系统崩溃 。
如何避免?
1:在缓存失效后 , 通过加锁或者队列来控制读数据库写缓存的线程数量 。比如对某个 key 只允许一个线程查询数据和写缓存 , 其他线程等待 。
2:做二级缓存 , A1 为原始缓存 , A2 为拷贝缓存 , A1 失效时 , 可以访问 A2 , A1 缓存失效时间设置为短期 , A2 设置为长期
3:不同的 key , 设置不同的过期时间 , 让缓存失效的时间点尽量均匀




推荐阅读