【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 倍于日常流量的访问请求,确保了系统的稳定性和用户体验

相关推荐
2301_7930868717 小时前
Redis 04 Reactor
数据库·redis·缓存
1892280486121 小时前
NY243NY253美光固态闪存NY257NY260
大数据·网络·人工智能·缓存
青鱼入云21 小时前
redis怎么做rehash的
redis·缓存
FFF-X1 天前
Vue3 路由缓存实战:从基础到进阶的完整指南
vue.js·spring boot·缓存
夜影风2 天前
Nginx反向代理与缓存实现
运维·nginx·缓存
编程(变成)小辣鸡2 天前
Redis 知识点与应用场景
数据库·redis·缓存
菜菜子爱学习2 天前
Nginx学习笔记(八)—— Nginx缓存集成
笔记·学习·nginx·缓存·运维开发
魏波.2 天前
常用缓存软件分类及详解
缓存
yh云想3 天前
《多级缓存架构设计与实现全解析》
缓存·junit
白仑色3 天前
Redis 如何保证数据安全?
数据库·redis·缓存·集群·主从复制·哨兵·redis 管理工具