缓存穿透 与 缓存雪崩

缓存穿透

用户用一个不存在的id(比如-1)发起请求查询数据,缓存和数据库中都没有这条数据,如果此时有人恶意发起大量的请求,由于缓存中没有数据,那么这些请求将直接打到数据库层,给数据库带来压力。

  • 解决方案:第一次查询结果为null时,可以放一个字符串空("")到缓存里,这样后面再次相同的请求就会获得缓存字符串空,而不会因为没有缓存而去访问数据库了。当然为了不影响正常的业务查询,需要给这个缓存设置一个合理的过期时间,这样就能够防止缓存穿透了。

缓存雪崩

大量的缓存设置了同一时间失效,而恰好在缓存失效的同时,有大量的请求过来,此时这些请求将直接打到数据库上,引起宕机,这就是缓存雪崩。

  • 雪崩预防
    • 设置缓存永不过期
    • 过期时间错开
    • 多缓存结合,例如:redis -> memcache -> db,memcache失效时间比redis设置的久一点
    • 采购第三方Redis
posted @ 2021-09-01 15:09  金盛年华  阅读(40)  评论(0)    收藏  举报