• 缓存穿透、缓存击穿、缓存雪崩,以及怎么解决?


    什么是缓存穿透?

    1. 缓存穿透:缓存中查不到,数据库中也查不到。
    2. 解决方案:
    • 对参数进行合法性校验
    • 将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的key占满,这一类缓存的有效期要设置得短一点。
    • 引入布隆过滤器(BloomFilter),在访问Redis之前判断数据是否存在。要注意布隆过滤器存在一定的误判率(BloomFilter判断不在集合中则一定不在集合中,BloomFilter判断在集合中则可能不在集合中),并且布隆过滤器只能加数据不能减数据。

    什么是缓存击穿?

    1. 缓存击穿:缓存中没有,数据库中有。一般是出现在存储数据初始化以及key过期了的情况。他的问题在于,重新写入缓存,需要一定的时间,如果是在高并发场景下,过多的请求就会瞬间写到DB上,给DB造成很大的压力。
    2. 解决方案:
    • 设置这些热点缓存永不过期。这时要注意在value当中包含一个逻辑上的过期时间,然后另起一个线程,定期重建这些缓存。
    • 加载DB的时候,要防止并发(加锁处理)。

    什么是缓存雪崩?

    1. 缓存雪崩:缓存大面积过期,导致请求都被转发到DB。
    2. 解决方案:
    • 把缓存的失效时间分散开。例如,在原有的统一失效时间基础上,增加一个随机值。
    • 对热点数据设置永不过期。
  • 相关阅读:
    动手动脑
    大道至简第七八章读后感
    super 的用法
    第六章
    课后作业
    大道至简第五章读后感
    课后作业
    大道至简第四章读后感
    大道至简——第六章
    Java数组课后作业
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14616754.html
Copyright © 2020-2023  润新知