关于java:Redis缓存中缓存穿透缓存击穿缓存雪崩解决方案

1.前言

当咱们设计一个Redis缓存服务时,缓存穿透、缓存击穿、缓存雪崩这三大问题咱们不得不思考。同时参见面试时面试官也会常问这三大问题。本章咱们来剖析一下这三大问题。


2.缓存穿透

2.1什么叫缓存穿透?

  • 失常状况下,查问数据无论在缓存中或者数据库中,都应该有这样的数据。但如果这个数据在缓存和数据库都不存在,那么用户高并发环境下拜访数据库缓存中都不存在的数据称之为缓存穿透景象.

2.2穿透带来的问题

  • 如果有些不怀好意的人,利用这个不存在的数据,频繁大量的拜访你的数据库,产生大量的申请,极有可能导致你的数据库异样拜访不了、数据库宕掉。

2.3解决方案

1). 禁用IP 限度IP拜访.
2). 限流 每秒最多拜访3次
3). 布隆过滤器(常见解决方案)
4). 缓存空值(简略粗犷)

  • 布隆过滤器

    • 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器能够用于检索一个元素是否在一个汇合中。它的长处是空间效率和查问工夫都比个别的算法要好的多,毛病是有肯定的误识别率和删除艰难。
    • 原理
    • 毛病:
    • 因为hash碰撞问题,可能由多个key有雷同的地位,所以得出结论,布隆过滤器认为数据存在,那么数据可能存在.如果布隆过滤器认为数据不存在,则数据肯定不在.
    • 解决方案
    • 1.扩容二进制向量位数.
    • 2.减少hash函数的个数
    • 当位数减少/函数适当减少,则能够无效的升高hash碰撞的几率. 默认值 0.03

  • 缓存空值

    • 这个计划简略粗犷,就是拿到这些不存在数据key,并把value设置成null放到缓存中去,前面再申请这样的数据间接到缓存查问,返回给它null就能够了,切记也要给这些不存在数据的key设置生效工夫。

3.缓存击穿

3.1什么叫缓存击穿?

  • 在高并发的环境下,大量申请同时申请同一个key,如果凑巧这个时候key生效了。那么当某个热点数据在缓存中忽然生效.导致大量的用户间接拜访数据库.导致并发压力过高造成异样这个景象被称为缓存击穿

3.2击穿带来的问题

  • 造成某个时刻所有拜访间接打在数据库上,导致数据库压力剧增

3.3解决方案

1.尽可能将热点数据的超时工夫 设定的长一点
2.设定多级缓存 超时工夫采纳随机算法.

4.缓存雪崩

4.1什么叫缓存雪崩?

  • 在缓存服务器中,因为大量的缓存数据生效,导致用户拜访的命中率过低.导致间接拜访数据库.例如缓存服务宕机,而后大量申请间接拜访数据库,极有导致数据库也宕机.

4.2雪崩带来的问题

导致缓存、数据库等一系列服务宕机..

4.3解决方案

  1. 应用集群缓存,保障缓存服务的高可用
  2. 设定超时工夫时,应该采纳随机算法

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理