几种常见的缓存异常场景

  常见的缓存异常场景有:缓存穿透、缓存击穿、缓存雪崩等,下面总结一下几种常见的异常。

  • 缓存穿透
    • 概念:缓存穿透是指用户请求的数据在缓存中没有命中,在数据库中也不存在,导致用户每次请求该数据都要直接去数据库中查一遍再返回空。
    • 危害:恶意攻击者可以不断请求系统中不存在的数据导致大量请求落在数据库上造成数据库压力过大或击垮数据库系统。
    • 解决方案:①布隆过滤器(专门检测集合中是否存在特定的元素)②返回空对象,将空对象也写入到缓存中。
  • 缓存击穿
    • 概念:指在大并发集中对某个key进行访问的时候该key失效的瞬间,持续的大并发直接穿破缓存落在数据库上。
    • 危害:数据库瞬时压力骤增,造成大量的请求阻塞。
    • 解决方案:①使用互斥锁(mutex key),同一时间只有一个线程读数据库然后写缓存,其他线程阻塞。②热点数据设置永不过期。  
  • 缓存雪崩
    • 概念:指缓存中的key大批量同时失效,导致大量查询请求落在数据库上。  
    • 危害:数据库压力过大甚至宕机。
    • 解决方案:①均匀不同key的过期时间;②加互斥锁;③缓存永不过期;④双层缓存策略(主备两层缓存,主缓存失效后从备份缓存里同步)

参考:https://mp.weixin.qq.com/s/PhAyCMsYcGFfH8kJMsXkJQ    

原文地址:https://www.cnblogs.com/smallzhen/p/14427918.html