1、背景

在高并发环境下,用户长时间对服务器进行操作,可能会呈现缓存穿透、缓存击穿、缓存雪崩等问题。

2、缓存穿透

2.1 什么是缓存穿透?

高并发前提下,用户拜访数据库缓存都不存在的数据称之为缓存穿透。
缓存之所以存在,除了进步程序运行效率,还有就是爱护数据库。如果有大量的申请拜访数据库跟缓存都没有的数据,那么此时缓存便会生效,这大量的申请必然会间接拜访数据库。

2.2 缓存穿透的解决方案

①禁用IP,限度IP的应用(因为拜访不存在的数据基本上属于歹意拜访)
②限流,每秒最多拜访3次
③应用布隆过滤器

2.3 布隆过滤器

2.3.1 介绍

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器能够用于检索一个元素是否在一个汇合中。它的长处是空间效率和查问工夫都比个别的算法要好的多,毛病是有肯定的误识别率和删除艰难。

2.3.2 原理

①首先对数据进行预加载。将数据进行hash计算得出的hash值进行特定的函数运算出数组的索引,而后在该坐标地位用二进制向量1示意。如此一来坐标为0的数据肯定不存在,所以能够禁止拜访,而坐标为1可能存在,能够放行拜访。
②当一个申请过去了,通过hash加特定的函数算法而后查看数组的二进制的值来判断是否容许通过。
③因为是采纳二进制向量存储,所以节俭大量内存空间。

2.3.4 hash碰撞问题

如果坐标值是0,那就肯定不存在,然而坐标是1也不代表肯定存在,因为两个不同的key计算的后果是可能是雷同的坐标值,那么如何解决这个问题呢?

2.3.4.1 解决hash碰撞问题

要解决hash碰撞的问题,那就要升高hash碰撞的概率。
①通过增长数据的个数,来升高坐标值雷同的概率。
②通过采纳多种hash函数来计算坐标值,因为不同的hash函数计算出的坐标值后果会有不同,只有正在存在的数据无论通过哪种hash函数计算,坐标值都是向量1,凡是有一个后果不是1,就能够判定这个是不存在的数据。

3、缓存击穿

3.1 什么是缓存击穿?

某个热点数据在缓存中忽然生效。导致大量的用户间接拜访数据库。导致并发压力过高造成异样的景象。

3.2 缓存击穿的解决方案

之所以存在缓存击穿次要是因为数据被设置了超时工夫,当超时工夫一到便会被删除,而此时刚好处于高并发。
①尽可能将热点数据的超时工夫,设定的长一点。
②设定多级缓存,超时工夫采纳随机算法。只有不同时生效便能够无效阻止这种景象。

4、缓存雪崩

4.1 什么是缓存雪崩?

在缓存服务器中,因为大量的缓存数据生效,导致用户拜访的命中率过低。导致间接拜访数据库。fluashAll命令和数据大量数据同时超时可能导致缓存雪崩景象。

4.2 缓存雪崩的解决方案

①设定超时工夫时,应该采纳随机算法
②设定多级缓存