Redis 经典缓存问题:一致性、穿透、击穿、雪崩与污染
Redis 是一种广泛应用的高性能内存数据库,常用于缓存场景以提升系统性能和用户体验。然而,使用 Redis 缓存时,可能会遇到一些经典问题,比如一致性问题、缓存穿击、缓存穿透、缓存雪崩,以及缓存污染等。这些问题如果不加以有效处理,可能导致系统性能下降,甚至引发服务不可用的严重后果。
本文主要探讨Redis作为缓存,在实践中可能会有哪些问题。
本文目录:
-
为什么要理解Redis缓存问题
-
缓存穿透
-
缓存击穿
-
缓存雪崩
-
缓存污染
-
数据库和缓存一致性
1. 为什么要理解Redis缓存问题
Redis 缓存能够显著提升数据访问速度,但其问题常与实际业务场景相关。深入理解这些问题及其解决方案,能够帮助开发者设计更加健壮和高效的系统架构。
在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问Mysql等数据库。这样可以大大缓解数据库的压力。
当缓存库出现时,必须要考虑如下问题:
-
缓存穿透
-
缓存穿击
-
缓存雪崩
-
缓存污染
-
缓存和数据库一致性
2. 缓存穿透
问题定义:
缓存穿透指的是客户端频繁请求数据库中根本不存在的键,由于缓存中无法命中(因为数据不存在,无法写入缓存),每次请求都会直接访问数据库,导致数据库负载增加。
解决方法:
- 布隆过滤器
在缓存层增加布隆过滤器,将可能的合法数据提前存储在布隆过滤器中,拦截非法请求。
- 缓存空值
对于不存在的键,也将其值设置为
null
并缓存一定时间,但需要注意避免缓存污染(详见后文)。
3. 缓存击穿
问题定义:
缓存击穿发生在某个热点缓存键过期时,大量请求同时涌向数据库,造成数据库瞬时压力过高。
解决方法:
- 设置热点数据不过期
将热点数据的过期时间设置为极长,或者动态更新热点数据的过期时间。
- 互斥锁
对访问过期缓存的请求加锁,只有获取锁的请求可以加载数据并更新缓存,其余请求等待。
4. 缓存雪崩
问题定义:
缓存雪崩指的是大量缓存数据在同一时间段失效,导致所有请求都涌向数据库,引发数据库崩溃。
解决方法:
- 缓存过期时间分布化
为不同的缓存键设置随机过期时间,避免同一时间大批量缓存失效。
- 多级缓存
在 Redis 缓存前增加本地缓存层,减轻数据库直接压力。
- 降级限流
在数据库压力过大时,开启服务降级或请求限流机制。
5. 缓存污染
问题定义:
缓存污染是指缓存中存储了低命中率或无意义的数据,占用了大量内存资源,降低缓存效率。
解决方法:
- 设置缓存淘汰策略
根据业务需求选择合适的淘汰策略(如 LRU、LFU)。
- 过滤低价值数据
对可能影响缓存效率的数据进行预处理,避免写入缓存。
6. 数据库和缓存一致性
问题定义:
Redis 缓存和数据库中的数据可能出现不一致的问题,尤其是在数据更新时,可能导致缓存中的数据陈旧。
解决方法:
- 删除缓存策略
在更新数据库后立即删除缓存,使下一次访问重新加载最新数据。
注意,我们的更新是先更新数据库,成功后,让缓存失效。
- 延时双删策略
在更新数据库后,删除缓存,并在一定延时后再次删除缓存,确保缓存数据更新。
- 订阅通知
通过 Redis 的 Pub/Sub 功能或类似工具(如 Canal)监听数据库变更并同步更新缓存。
结语
Redis 是一个强大的缓存工具,但在高并发场景中,缓存相关问题如穿透、击穿和雪崩可能严重影响系统的稳定性。了解这些问题并采用合适的解决方案,是设计高性能系统的关键。希望本文能为您解决实际问题提供帮助!
END
相关阅读:
专注架构技术研究,一起跨越职业瓶颈!
关注公众号,免费领学习资料
如果您觉得还不错,欢迎关注和转发~
本文分享自微信公众号 - 架构精进之路(jiagou_jingjin)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源日报 | Vim项目现状;MiniMax-01开源;PG获年度数据库“五冠王”;给AI喂料的小技巧;USB全新标识公布;AI公司是真饿了
欢迎阅读 OSCHINA 编辑部出品的开源日报,每天更新一期。 # 2025.1.15 今日要闻 “苹果 AI”有望在 2025 年亮相中国,已成立新公司 苹果智能(Apple Intelligence)有望在 2025 年正式亮相中国市场。据企查查官方消息,1 月 10 日,苹果技术开发(上海)有限公司成立,法定代表人为 Tejas Kirit Gala,注册资本 3500 万美元。 公开数据显示,该公司行业属于软件开发,主要经营范围涵盖软件开发、大数据服务、数据处理服务以及存储支持服务等。股权穿透显示,该公司由 APPLE SOUTH ASIA PTE. LTD. 全资持股。 苹果 CEO 库克在 2024 年三次访华期间,曾提到关于中国市场推出 AI 手机的计划,并强调了公司正在努力推进这一计划。因此有理由推测,苹果公司通过这家新公司,在中国加速推进 Apple Intelligence 服务落地。 Vim 项目现状 Vim 创始人及终身仁慈独裁者(BDFL)Bram Moolenaar 于 2023 年的离世让社区感到震惊,同时也引发了对项目未来的担忧。 在 2024 年 ...
- 下一篇
企业要出海,别只知道关心软件内核
12月26日,开源中国邀请观测云 CEO 蒋烁淼将、亚马逊云科技 SA Manager 梁风飚、OceanBase CEO杨冰、AutoMQ 联合创始人兼 CEO 王小瑞、Bytebase 联合创始⼈兼 CEO 陈天舟等企业家做客【开源漫谈】直播间,探讨我国基础软件如何出海。 期间,大家聊到了中国基础软件和世界优秀软件的之间差距。 扫码查看直播回放: 以下内容根据直播整理: 蒋烁淼:不带任何色彩地看,中国基础软件和世界优秀软件相比,有多大的差距? 杨冰:我们既做国内市场,也做海外市场,感触还是比较深。我觉得差距是有的,但不是不可超越。 中国有很好的场景,很好的工程师,可以把技术做得很强,OceanBase也是如此。但我们进入到商业市场这一步,碰到的第一个问题就是:变成商品以后,产品如何去定价?我们比较擅长成本定价或者竞争定价,但是不擅长价值定价。 像 Oracle以及很多SaaS产品,都会有标准版,高级版——会有很多针对客户价值和需求的一些扩展性设计,比如高可用套件、安全套件等等。既能够实现价值,又会让客户愿意付费,这是对商业化和产品非常有利的。 我们国内软件厂商,在产品商业化的能力方...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能