|NO.Z.00048|——————————|^^ 重要 ^^|——|Hadoop&Redis.V01|——|Redis.v01|穿透雪崩击穿|

一、Redis经典问题解析:穿透雪崩击穿
### --- 缓存穿透

~~~     一般的缓存系统都是按照key去缓存查询如果不存在对应的value就应该去后端系统查找(比如DB)。
~~~     缓存穿透是指在高并发下查询key不存在的数据,会穿过缓存查询数据库。导致数据库压力过大而宕机
### --- 解决方案:

~~~     对查询结果为空的情况也进行缓存缓存时间(ttl)设
~~~     置短一点或者该key对应的数据insert之后清理缓存。
~~~     # 问题:缓存太多空值占用了更多的空间
~~~     使用布隆过滤器。在缓存之前在加一层布隆过滤器,
~~~     在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回,存在再查缓存和DB。
~~~     # 布隆过滤器(Bloom Filter)是1970年由布隆提出的。
~~~     它实际上是一个很长的二进制向量和一系列随机hash映射函数。

~~~     # 布隆过滤器可以用于检索一个元素是否在一个集合中。
~~~     它的优点是空间效率和查询时间都远远超过一般的算法。
~~~     # 布隆过滤器的原理是,
~~~     当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个数组中的K个点,把它们置为1。

~~~     # 检索时,
~~~     我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:
~~~     如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。
~~~     这就是布隆过滤器的基本思想。
~~~     把字符串------>位 省空间 (1或0)
~~~     不用循环------>比较位置 省时间
二、缓存雪崩
### --- 缓存雪崩

~~~     当缓存服务器重启或者大量缓存集中在某一个时间段失效,
~~~     这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
~~~     突然间大量的key失效了或redis重启,大量访问数据库,数据库崩溃
### --- 解决方案:

~~~     key的失效期分散开 不同的key设置不同的有效期
~~~     设置二级缓存(数据不一定一致)
~~~     高可用(脏读)
三、缓存击穿
### --- 缓存击穿

~~~     # 对于一些设置了过期时间的key,
~~~     如果这些key可能会在某些时间点被超高并发地访问,
~~~     是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,
~~~     这个和缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key。
~~~     # 缓存在某个时间点过期的时候,
~~~     恰好在这个时间点对这个Key有大量的并发请求过来,
~~~     这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,
~~~     这个时候大并发的请求可能会瞬间把后端DB压垮。
### --- 解决方案:

~~~     # 用分布式锁控制访问的线程
~~~     使用redis的setnx互斥锁先进行判断,这样其他线程就处于等待状态,
~~~     保证不会有大并发操作去操作数据库。
~~~     # 不设超时时间,volatile-lru 但会造成写一致问题
~~~     当数据库数据发生更新时,缓存中的数据不会及时更新,
~~~     这样会造成数据库中的数据与缓存中的数据的不一致,应用会从缓存中读取到脏数据。
~~~     可采用延时双删策略处理,这个我们后面会详细讲到。

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示