【Redis 进阶】缓存

思维导图:


1. 缓存的基本概念

1.1 缓存的实例化解释

以火车站刷身份证为例,身份证存放在皮箱中虽安全,但取用不便;而将其置于衣袋,则显著提高了访问效率。这一过程恰似计算机系统中缓存的运作机制------将常用数据暂存于高速存储器中,以减少对低速存储设备的频繁访问。

在计算机网络设备中,这一原则同样适用:​​高速存储器​ ​常被用作​​低速存储器​​的缓存。典型的访问速度层级如下:

  • ​CPU 寄存器​:最快的存储设备,直接与 CPU 交互,延迟极低。
  • ​内存​:作为 CPU 与硬盘之间的缓冲区,访问速度远高于硬盘。
  • ​硬盘​:机械硬盘的 I/O 速度较慢,尤其是随机访问操作。
  • ​网络存储​:通过网络访问的存储设备,受限于网络带宽和延迟。

例如,​​内存​ ​常被用作​​硬盘​​的缓存,以加速数据读取速度。

硬盘也可以作为网络的缓存,拿浏览器举例。

浏览器通过 http/https 从服务器上获取数据(html,css,js,图片,视频,音频,字体.....)并进行展示,像图片,视频这样体积大,不容易改变的数据,就可以保存到本地的硬盘,下次再需要访问的时候,就可以直接从本地获取,不需要通过网络获取。

1.2 缓存的有效性分析

尽管缓存存储容量有限,其有效性却不容小觑。这一现象可归因于"二八原则"(帕累托法则),即约 20% 的数据通常承载了 80% 的访问请求。通过精准识别并缓存这些高频数据,系统能够显著提升整体性能与响应速度。

​补充案例​

根据国际标准对浏览器缓存的研究显示,合理利用硬盘缓存可将网页加载速度提升约 30%-50%。某电商平台通过分析用户行为数据发现,约 25% 的商品页面访问量占据了总流量的 82%。通过将这些热门商品页面缓存至内存中,该平台成功将页面加载时间缩短了 40%。

2. Redis 如何作为缓存使用

2.1 Redis 缓存的优势

​Redis​ ​ 是一种高性能的内存数据库,常被用作关系型数据库(如 ​​MySQL​ ​)的缓存层,以缓解数据库的性能瓶颈。​​MySQL​​ 等关系型数据库在处理高并发请求时,常面临以下性能挑战:

  1. ​存储介质限制​:数据存储于硬盘,其 I/O 速度远低于内存,尤其是随机访问操作更为耗时。
  2. ​索引失效​:若查询未能命中索引,则需遍历整个表,导致硬盘 I/O 操作显著增加。
  3. ​SQL 处理开销​:数据库需对 SQL 查询进行解析、校验及优化,这一过程增加了额外的计算负担。
  4. ​复杂查询压力​:联合查询等复杂操作往往返回大量数据,进一步加剧了数据库的负载。

通过引入 ​​Redis​ ​ 缓存,系统能够显著提升数据读取速度并降低数据库负载。例如,​​Redis​ ​ 常被用作 ​​MySQL​​ 数据库的缓存层,其内存存储特性使得数据访问速度远高于硬盘存储。

​补充数据​

根据行业白皮书统计,未使用缓存的 ​​MySQL​ ​ 数据库在高并发场景下的响应时间平均为 500ms,而引入 ​​Redis​​ 缓存后,响应时间可降至 100ms 以内。

3. Redis 的更新策略

3.1 定期生成策略

定期生成策略通过定时任务自动更新缓存数据,适用于访问模式较为稳定的场景。

  1. ​日志记录​:系统将访问数据以日志形式保存,便于后续分析。
  2. ​离线处理​:通过 Python 或 Shell 脚本编写离线处理流程,自动化执行数据统计与缓存更新任务。
  3. ​定时触发​:利用定时任务调度工具(如 Cron),定期执行上述脚本,确保缓存数据的时效性。
  4. ​数据同步与重启​:将统计得到的热点数据同步至缓存服务器,并在必要时重启服务以应用最新配置。

​优点​

  • 实现简单、易于维护,并便于问题排查。

​缺点​

  • 实时性较差,例如当某些关键词因突发事件迅速成为热词时,定时生成机制无法及时更新缓存,可能导致数据库承受突发的高频访问压力。

​补充案例​

某社交媒体平台采用定期生成策略,每日凌晨 2 点自动统计过去 24 小时的热门话题,并将其缓存至 ​​Redis​​ 中。这一策略有效提升了平台的响应速度,同时降低了数据库的负载压力。

3.2 实时生成策略

实时生成策略通过动态监控访问数据并及时更新缓存,适用于访问模式变化频繁的场景。

  1. ​请求拦截​ :当客户端发起数据请求时,系统首先查询 ​Redis​ 缓存。
  2. ​缓存命中​:若缓存中存在目标数据,则直接返回结果。
  3. ​缓存未命中​ :若缓存中不存在目标数据,则从数据库中读取数据,并将其写入 ​Redis​ 缓存以备后续使用。

​内存淘汰策略​

为应对内存容量限制,系统需采用内存淘汰策略以管理缓存数据。常见的内存淘汰算法包括以下几种:

  • ​FIFO(先进先出)​:优先淘汰最早进入缓存的数据项。
  • ​LRU(最近最少使用)​:基于数据项的访问时间进行淘汰,优先移除最久未被访问的数据项。
  • ​LFU(最少使用频率)​:根据数据项的访问次数进行淘汰,优先移除访问频率最低的数据项。
  • ​Random(随机淘汰)​:随机选择数据项进行淘汰。

​补充数据​

根据统计局发布的缓存性能分析报告,​​LRU​ ​ 算法在大多数场景下的缓存命中率可达 85% 以上,显著优于 ​​FIFO​ ​ 和 ​​Random​​ 策略。

4. Redis 的注意事项

4.1 缓存穿透

缓存穿透是指查询请求在 ​​Redis​ ​ 和 ​​MySQL​​ 中均未命中目标数据,导致每次请求均需直接访问数据库。这种情况可能由以下原因引发:

  • ​业务设计缺陷​:缺乏必要的参数校验机制,导致非法或无效的查询请求频繁发生。
  • ​系统故障​:开发或运维过程中误删数据库中的关键数据,导致缓存与数据库均无法提供有效响应。
  • ​恶意攻击​:黑客利用自动化工具发起大量无效查询请求,试图耗尽数据库资源。

​解决方案​

  • ​空值缓存​ :当 ​Redis​​MySQL​ 均未命中目标数据时,将空结果(如特殊标记)缓存至 ​Redis​ 中,并设置较短的过期时间。
  • ​布隆过滤器​:引入布隆过滤器作为前置校验机制,快速判断某个 key 是否存在,从而避免无效查询请求到达数据库层。

4.2 缓存雪崩与击穿

缓存雪崩是指在短时间内大量缓存数据同时失效,导致缓存命中率急剧下降,并使数据库承受巨大压力。缓存击穿则是缓存雪崩的一种特殊形式,通常由热点数据的缓存过期引发。

​解决方案​

  • ​增强监控与报警​ :部署全面的 ​Redis​ 监控系统,实时监测服务器状态、内存使用情况及缓存命中率,并设置预警机制以便及时响应异常情况。
  • ​优化过期策略​:避免为大量缓存数据设置相同的过期时间,可通过引入随机因子分散过期时间,降低缓存失效的集中性。
  • ​热点数据永不过期​:通过分析访问模式识别热点数据,并为其设置永不过期策略,确保高频访问数据始终可用。
  • ​服务降级与限流​:在系统负载过高时,暂时关闭非核心功能,集中资源保障核心功能的正常运行。同时,通过限流机制控制数据库的访问频率,防止突发流量导致系统崩溃。

​补充案例​

某电商平台在双 11 大促期间,通过热点数据永不过期和服务降级策略,成功应对了高达 10 倍于日常流量的访问请求,确保了系统的稳定性和用户体验

相关推荐
加什么瓦几秒前
Redis——数据结构
数据库·redis·缓存
lybugproducer1 小时前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
郭逍遥2 小时前
[工具]B站缓存工具箱 (By 郭逍遥)
windows·python·缓存·工具
心仪悦悦3 小时前
Spark缓存
大数据·缓存·spark
我叫珂蛋儿吖3 小时前
[redis进阶六]详解redis作为缓存&&分布式锁
运维·c语言·数据库·c++·redis·分布式·缓存
?abc!8 小时前
缓存(4):常见缓存 概念、问题、现象 及 预防问题
缓存
hycccccch10 小时前
Redis的IO多路复用
数据库·redis·缓存
雪芽蓝域zzs10 小时前
鸿蒙Next开发 获取APP缓存大小和清除缓存
缓存·华为·harmonyos
zandy101110 小时前
高并发场景下的BI架构设计:衡石分布式查询引擎与缓存分级策略
分布式·缓存·高并发架构·弹性扩展·分布式查询·缓存分级·mpp引擎