人类进步的阶梯
算法和数据结构
滑动窗口go模板
nSum问题解决模板
【链表问题】
21. 合并两个有序链表
23. 合并 K 个升序链表
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
141. 环形链表
redis
tx
一些QA
【Redis】
rehash
击穿、穿透、雪崩
【计算机网络】
TCP
【Mysql】
索引
资料索引
本文档使用 MrDoc 发布
-
+
首页
击穿、穿透、雪崩
[不用背八股文!一文搞懂redis缓存击穿、穿透、雪崩!](https://cloud.tencent.com/developer/article/2407203) [面试官:什么是布隆过滤器?如何解决高并发缓存穿透问题?](https://cloud.tencent.com/developer/article/1854044) ## 击穿 某个key不存在,大量并发请求读取这个key,导致请求打到数据库 解决方案: 1. 缓存永不过期 2. 不删除缓存,改为更新db数据到缓存 3. 检查key快失效的时候,提前刷新成最新的数据 4. singlefight 5. 查询的时候加分布式锁 ## 穿透 多个请求访问一个缓存和db都不存在的数据,导致每个请求都会落到db中进行查询 1. 参数校验,过滤恶意请求 2. 设置特殊值,给找不到的数据设置较短的缓存(会浪费空间) 3. 布隆过滤器 ### 布隆过滤器 [布隆过滤器(Bloom Filter)详解](https://www.cnblogs.com/liyulong1982/p/6013002.html) 类似hash set,判断某个key是否存在某个集合中,不存储key,只存储比特位 优点:不存储key,省空间 缺点: 1. 算法判断key在集合中时,有一定的概率key其实不在集合中(即只有:值可能存在 / 值不存在两种结果) 2. 无法删除 典型的应用场景: 某些存储系统的设计中,会存在空查询缺陷:当查询一个不存在的key时,需要访问慢设备,导致效率低下。 比如一个前端页面的缓存系统,可能这样设计:先查询某个页面在本地是否存在,如果存在就直接返回,如果不存在,就从后端获取。但是当频繁从缓存系统查询一个页面时,缓存系统将会频繁请求后端,把压力导入后端。 这是只要增加一个bloom算法的服务,后端插入一个key时,在这个服务中设置一次 需要查询后端时,先判断key在后端是否存在,这样就能避免后端的压力。 ## 雪崩 大部分的key同时过期,导致大量并发请求落到数据库,导致数据库崩溃 1. 给缓存过期加上随机值 2. 业务层调用db限流 3. 过期前提前刷新key 4. 给请求加随机短延时,分散请求、只放少量请求进来刷新缓存、singlefight
adminadmin
2024年6月4日 00:41
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码