快速了解缓存穿透与缓存雪崩( 二 )


【快速了解缓存穿透与缓存雪崩】 
“永远不过期”
这种方法对于性能非常友好,唯一不足的就是构建缓存时候,其余线程(非构建缓存的线程)可能访问的是老数据,但是对于一般的互联网功能来说这个还是可以忍受 。
缓存预热
有效应对缓存的击穿和雪崩的一种方式是缓存预热 。
缓存预热就是系统上线前,将相关的缓存数据直接加载到缓存系统 。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,用户直接查询事先被预热的缓存数据 。
解决思路

  1. 直接写个缓存刷新页面,上线时手工操作下 。
  2. 数据量不大,可以在项目启动的时候自动进行加载 。
  3. 定时刷新缓存 。
限流
有效应对缓存的击穿和雪崩的另一种方式是限流 。
在缓存失效后,通过队列来控制读数据库写缓存的线程数量 。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待 。
常见的限流算法
  1. 固定时间窗口算法(计数器)
  2. 滑动时间窗口算法
  3. 令牌桶算法
  4. 漏桶算法
有关限流算法的详细介绍,请点击查看高并发系统的限流算法与实现
总结
缓存穿透、击穿和雪崩是以预防为主、补救为辅,而在应对缓存的问题其实也没有一个完全完美的方案,只有最适合自己业务系统的方案 。
更多内容,欢迎关注微信公众号:全菜工程师小辉~




推荐阅读