【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 等关系型数据库在处理高并发请求时,常面临以下性能挑战:
- 存储介质限制:数据存储于硬盘,其 I/O 速度远低于内存,尤其是随机访问操作更为耗时。
- 索引失效:若查询未能命中索引,则需遍历整个表,导致硬盘 I/O 操作显著增加。
- SQL 处理开销:数据库需对 SQL 查询进行解析、校验及优化,这一过程增加了额外的计算负担。
- 复杂查询压力:联合查询等复杂操作往往返回大量数据,进一步加剧了数据库的负载。
通过引入 Redis 缓存,系统能够显著提升数据读取速度并降低数据库负载。例如,Redis 常被用作 MySQL 数据库的缓存层,其内存存储特性使得数据访问速度远高于硬盘存储。
补充数据
根据行业白皮书统计,未使用缓存的 MySQL 数据库在高并发场景下的响应时间平均为 500ms,而引入 Redis 缓存后,响应时间可降至 100ms 以内。
3. Redis 的更新策略
3.1 定期生成策略
定期生成策略通过定时任务自动更新缓存数据,适用于访问模式较为稳定的场景。
- 日志记录:系统将访问数据以日志形式保存,便于后续分析。
- 离线处理:通过 Python 或 Shell 脚本编写离线处理流程,自动化执行数据统计与缓存更新任务。
- 定时触发:利用定时任务调度工具(如 Cron),定期执行上述脚本,确保缓存数据的时效性。
- 数据同步与重启:将统计得到的热点数据同步至缓存服务器,并在必要时重启服务以应用最新配置。
优点
- 实现简单、易于维护,并便于问题排查。
缺点
- 实时性较差,例如当某些关键词因突发事件迅速成为热词时,定时生成机制无法及时更新缓存,可能导致数据库承受突发的高频访问压力。
补充案例
某社交媒体平台采用定期生成策略,每日凌晨 2 点自动统计过去 24 小时的热门话题,并将其缓存至 Redis 中。这一策略有效提升了平台的响应速度,同时降低了数据库的负载压力。
3.2 实时生成策略
实时生成策略通过动态监控访问数据并及时更新缓存,适用于访问模式变化频繁的场景。
- 请求拦截:当客户端发起数据请求时,系统首先查询 Redis 缓存。
- 缓存命中:若缓存中存在目标数据,则直接返回结果。
- 缓存未命中:若缓存中不存在目标数据,则从数据库中读取数据,并将其写入 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 进阶】缓存
思维导图: 1. 缓存的基本概念 1.1 缓存的实例化解释 以火车站刷身份证为例,身份证存放在皮箱中虽安全,但取用不便;而将其置于衣袋,则显著提高了访问效率。这一过程恰似计算机系统中缓存的运作机制——将常用数据暂存于…...
游戏资源传输服务器
目录 项目简介项目实现nginx配置服务器逻辑图 项目代码简介reactor 模型部分文件传输部分 项目演示视频演示演示分析 项目简介 使用C开发,其中资源存储在fastdfs 中,用户通过http上传或下载资源文件,此项目需要开启nginx中的nginx-upload-mod…...
dockerdesktop 重新安装
1、卸载 dockerdesktop 卸载时,最后一步删除镜像文件 会卡住 取消 2、在资源管理器中将镜像文件路径改名 如:e:\docker 修改 e:\docker1 3、重新安装wsl wsl --shutdown 以管理员身份运行hy.bat pushd "%~dp0" dir /b %SystemRoot%\servic…...
免费实用的远程办公方案
假如你需要快速检索出远程电脑文件并下载? 假如你需要访问远程电脑的共享文件夹? 假如你需要访问远程电脑的USB设备,例如软件加密狗、调试器、固件烧录器、U盘等? 本篇文章能够解决以上痛点。 这个方案非常实用,也很…...
论文知识总结
参考1 一 Intelligent reflecting surface (IRS)跟RIS区别是什么 Intelligent Reflecting Surface (IRS) 和 Reconfigurable Intelligent Surface (RIS) 在很多情况下所指相同或相近,常被视为同一类技术的不同表述,但在一些特定语境下也有细微区别&…...
WebGIS 开发黑科技:解锁地理信息的新视界
你能想象吗?在我们生活的这个广袤星球上,每一处角落的地理信息,竟能通过网页,以超乎想象的方式呈现在眼前。WebGIS,这个看似神秘的词汇,实则是当下地理信息领域的 “黑科技”。它究竟有何神奇魔力ÿ…...
Postman启动时检测到版本不匹配错误
Postman启动时检测到版本不匹配错误,提示:Version mismatch detected. Looks like youve used a newer version of the Postman app on this system. 找到 C:\Users\AppData\Local\Postman C:\Users\AppData\Roaming\Postman 并删除现有的 postman 文件夹…...
Java Spring MVC -01
SpringMVC 是一种基于 的实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 中。 First:SpringMVC-01-SpringMVC 概述 SpringMVC 是 Spring 框架的一个模块,用于构建 Web 应…...
遨游5G-A防爆手机:赋能工业通信更快、更安全
在工业数字化转型与5G-A商用进程加速的双重驱动下,中国防爆手机市场正迎来历史性发展机遇。作为“危、急、特”场景通信解决方案服务商,遨游通讯深刻洞察到:当5G-A网络以超高速率、海量连接和毫秒级时延重塑行业生态时,防爆手机这…...
MySQL 8.0 OCP 1Z0-908 51-60题
Q51.Examine this parameter setting: audit_logFORCE_LOG_PERMAENT What effect does this have on auditing? A)It will force the load of the audit plugin even in case of errors at server start.//插件在之前就必须加载完成,只有当插件之前通过 INSTALL PL…...
javax.servlet.Filter 介绍-笔记
1.javax.servlet.Filter 简介 javax.servlet.Filter 是 Java Servlet API 中的一个核心接口,用于在请求到达目标资源(如 Servlet 或 JSP)之前或响应返回给客户端之前执行预处理或后处理操作。它常用于实现与业务逻辑无关的通用功能ÿ…...
【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?
面试情境与问题引入 哈喽大家伙,我是布鲁伊。在前端开发面试中,面试官经常会抛出一些看似简单却能考察多方面能力的问题。"如何实现同一个链接在PC端和移动端展示不同应用?"就是这样一个典型问题。为什么面试官喜欢问这个问题?因为它能同时考察候选人的设备适配…...
GPT 经验
GPT 经验篇 一、gpt源码past_key_value是干啥的?二、gpt onebyone 每一层怎么输入输出?三、bert和gpt有什么区别四、文本生成的几大预训练任务?五、讲讲T5和Bart的区别,讲讲bart的DAE任务?六、讲讲Bart和Bert的区别&am…...
uniapp|实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,拍照保存至相册,多端兼容(APP/微信小程序)
基于uniapp以及微信小程序实现移动端人脸识别相似度对比,实现摄像头、相册权限获取、相机模块交互、第三方识别集成等功能,附完整代码。 目录 核心功能实现流程摄像头与相册权限申请权限拒绝后的引导策略摄像头调用拍照事件处理人脸识别集成图片预处理(Base64编码/压缩)调用…...
蓝桥杯13届国B 出差
题目描述 A、B、C、D四个人中要派两个人出差,按下述三个条件有几种安排方案,如何安排。 (1) 若A去,则C和D中要去一人。 (2) B和C不能都去。 (3) C去则D要留下。 输入描述 本题无输入。 输出描述 按字典序输出所有符合要求的安排方案&…...
论软件设计模式及其应用
三、正文 摘要 2023年 3 月,我所在的公司承接了某油企智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师,负责整个系统的架构设计工作。本文以该项目为例,详细论述了…...
实现 STM32 PWM 输出:原理、配置与应用详解
实现 STM32 PWM 输出:原理、配置与应用详解 在嵌入式开发领域,STM32 微控制器凭借其强大的功能和丰富的外设资源,被广泛应用。PWM(脉冲宽度调制)作为 STM32 的重要功能之一,对于电机调速、LED 调光、信号合…...
优艾智合机器人助力半导体智造,领跑国产化替代浪潮
在全球半导体产业加速自动化转型的背景下,传统物流已成为制约智能化升级的关键瓶颈。作为中国移动机器人行业的领军企业,优艾智合(YOUIBOT)自2017年起就敏锐洞察到"半导体设备国产化"的紧迫需求,依托在工业移…...
Pytorch张量和损失函数
文章目录 张量张量类型张量例子使用概率分布创建张量正态分布创建张量 (torch.normal)正态分布创建张量示例标准正态分布创建张量标准正态分布创建张量示例均匀分布创建张量均匀分布创建张量示例 激活函数常见激活函数 损失函数(Pytorch API)L1范数损失函数均方误差损失函数交叉…...
【RabbitMQ】工作队列和发布/订阅模式的具体实现
文章目录 建立连接工作队列模式实现创建队列和交换机生产者代码消费者代码运行程序启动消费者启动生产者 发布/订阅模式实现创建队列和交换机生产者代码创建交换机声明两个队列绑定队列和交换机发送消息完整代码 消费者代码完整代码 运行程序启动生产者启动消费者 建立连接 我…...
loki grafana 页面查看 loki 日志偶发 too many outstanding requests
问题描述 grafana 页面查看 loki 日志偶然出现 too many outstanding requests loki pod 日志报错 levelerror ts2025-05-13T06:15:52.509738812Z callerscheduler_processor.go:158 org_idfake traceID1570d49e6d15b25c msg"error notifying scheduler about finished …...
Python之with语句
文章目录 Python中的with语句详解一、基本语法二、工作原理三、文件操作中的with语句1. 基本用法2. 同时打开多个文件 四、with语句的优势五、自定义上下文管理器1. 基于类的实现2. 使用contextlib模块 六、常见应用场景七、注意事项 Python中的with语句详解 with语句是Python…...
tomcat搭建内网论坛
准备工作: 准备jdk-8u291-linux-x64.tar.gz压缩包与apache-tomcat-9.0.16.tar.gz压缩包。 jdk安装: tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ ln -s jdk1.8.0_291/ jdk vim /etc/profile.d/jdk.sh cat /etc/profile.d/jdk.s…...
基于开源AI大模型AI智能名片S2B2C商城小程序的零售结算技术创新研究——以京东AI与香港冯氏零售集团智能结算台为例
摘要:本文以京东AI与香港冯氏零售集团共同打造的人工智能结算台为切入点,结合开源AI大模型、AI智能名片及S2B2C商城小程序的技术特性,深入探讨其在零售结算领域的创新应用。研究发现,开源AI大模型为智能结算提供了强大的图像识别与…...
supabase 怎么新建项目?
在 Supabase 中新建项目主要通过官方网站的仪表盘 (Dashboard) 来完成。以下是详细步骤: 通过 Supabase 仪表盘新建项目: 注册/登录 Supabase 账户: 访问 Supabase 官网:https://supabase.com/如果你还没有账户,点击 …...
框架篇八股(自用)
框架篇 Spring框架中的bean不是线程安全的 Scope() singleton单例 prototype多例 一个类中有可修改的成员变量需要考虑线程安全 bean没有可变状态(service类,DAO类) 某种程度单例bean是线程安全的 AOP面向切面编程…...
Flask Docker Demo 项目指南
首先,创建一个新的项目目录并创建必要的文件: mkdir flask-docker-demo cd flask-docker-demo创建一个简单的Flask应用 (app.py): from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, Docker World…...
蓝卓AI智能体平台
在数字化浪潮席卷全球的今天,制造业企业正面临前所未有的挑战:如何将海量数据转化为精准决策?如何让传统生产流程具备“自进化”的智能?如何打破数字化与智能化之间的鸿沟?蓝卓数字科技凭借对工业场景的深刻理解&#…...
typedef unsigned short uint16_t; typedef unsigned int uint32_t;
你提到的这两行是 C/C 中的类型别名定义: typedef unsigned short uint16_t; typedef unsigned int uint32_t;它们的目的是让代码更具可读性和可移植性,尤其在处理精确位数的整数时非常有用。 ✅ 含义解释 typedef unsigned short uint16_t;…...
黑马k8s(五)
1.Namespace 2.Pod run nginx:nginx是pod控制器的名称,不是pod的名称 查看pod更高的参数: 启动一个不存在的镜像:pod 查看 dev下面的pod,第二个pod处于容器创建的状态 查看pod的详情描述: 通过pod的ip&…...
进程间通信分类
前提: 进程具有独立性,要通信就是要让它们:看到同一份资源(某种形式的内存空间,操作系统提供) 本地通信:同一台主机,OS,用系统调用通信。标准:systemV。 S…...
uniapp-商城-56-后台 新增商品(弹窗属性继续分析)
1、概述 前面我们讲了布局和相应商品属性的页面布局。属性是一个弹窗,它是一个cell的组件的实现属性。点击该cell就会调用uni-popup 进行弹窗。基本的页面布局如下: 属性显示其实是个一嵌套的数据显示。 2 页面显示商品属性 点击添加属性 2.1 代码如…...
奇怪的公式
奇怪的公式 背景导入 在剑桥大学,瞥了一眼下面这个公式,我眩晕了,庆幸自己没学数学专业。 1 2 3 4 ⋯ − 1 12 1234\dots -\frac{1}{12} 1234⋯−121 一天,剑桥大学教授哥德弗雷哈代收到一封来自印度的信。写信人叫拉马…...
web 自动化之 PO 设计模式详解
文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构?1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…...
golang 定时器
写法一: package mainimport ("fmt""sync""time" )type DemoTicker struct {ch <-chan time.Timestop chan struct{}sg *sync.WaitGroup }func main() {count, stopCount : 0, 5demo : DemoTicker{ch: time.Tick(time.Seco…...
ETL 数据集成平台与数据仓库的关系及 ETL 工具推荐
数字化时代企业每天都会产生海量的数据,这些数据分散在不同的系统、数据库和应用中。为了能够有效地利用这些数据,进行数据分析、商业智能决策等,ETL数据集成平台和数据仓库成为了企业数据管理架构中的关键组成部分。本文将深入探讨ETL数据集…...
java架构设计
1.可维护性 封装性,例如将缓存redis封装到一个service,别的地方用到,只需要传参调用就行。如果有一天换国产缓存,只需要修改service,而不需要修改多出引用地方 * 可维护性:后期功能迭代,不可避…...
UDP--DDR--SFP,FPGA实现之指令监测模块实现
指令监测模块实现介绍 如下图所示,为指令监测模块的运行框图 将指令设置为8bytes数据,故需要一个64位寄存器进行缓存,在进行数据缓存时,数据不可以输出至下一级模块,故对数据和有效指示信号也应该进行相应延迟&#…...
Houdini安装SideFX Labs工具架
开源免费的 https://github.com/sideeffects/SideFXLabs/releases 下载后解压 放到文档里 新建一个packages文件夹 把SideFXLabs.json 复制到packages文件夹 删除一些没用的平台 修改相关路径即可 然后就能在houdini里搜到 autouv 节点 不然没装是没有这个节点的 参考教程 …...
uniapp+vue3+uview来开发我们的项目
前言: 就像我们vue的web的框架element、iview等一样,我们的uni-app开发也有适合的他的框架,除了他本身的扩展组件以外,第三方好用的就是就是uview了。 实现效果: 官网信息: vue2版本:uview-ui …...
MySQL 5.7在CentOS 7.9系统下的安装(上)——以rpm包的形式下载mysql
这里我们主要以CentOS 7.9为例进行介绍,会顺带讲讲Ubuntu的操作方式。 目录 一、检查自己的机器上是否安装有MySQL: (1)第一步:检查系统中是否有正在运行的MySQL服务: (2) 检查当…...
【图像处理基石】什么是油画感?
在图像处理中,“油画感”通常指图像呈现出类似油画的块状纹理、笔触痕迹或色彩过渡不自然的现象,表现为细节模糊、边缘不锐利、颜色断层或人工纹理明显。这种问题常见于照片处理、视频帧截图或压缩后的图像,本质是画质受损的一种表现。以下是…...
深度学习之优化器【从梯度下降到自适应学习率算法】(pytorch版)
文章目录 优化器(Optimizer)二 基础优化器1. 梯度下降(Gradient Descent, GD)2. 随机梯度下降(Stochastic Gradient Descent, SGD) 三 动量优化算法标准动量优化(Momentum)自适应学习…...
React+Webpack 脚手架、前端组件库搭建
链接: 自己写的开发文档,希望大家多多批评...
基于 Python 和 OpenAI 接口规范的本地多轮对话
在自然语言处理的应用中,多轮对话系统是一种极具实用性的功能,无论是聊天机器人、客服系统还是智能助手,都离不开对上下文的持续理解和响应。随着 Ollama 等轻量级模型服务的流行,我们也可以在本地轻松部署语言模型,并…...
binlog日志以及MySQL的数据同步
binlog binlog是什么 记录所有数据库表结构,表数据的修改,但是不会记录Select和Show这类操作 binlog有几种记录模式 三种记录模式 statement: 基于SQL语句的复制 row: 基于行的复制,记录每行数据的变更(保证了数据的一致性&a…...
串口模块详细讲解
目录 1.串口介绍 2。STC-ISP串口功能介绍 3.接口及引脚定义 4.串口知识点 4.1 硬件电路 4.2 电平标准 4.3 相关术语 4.4 常见通信接口比较 4.5 51单片机的UART 4.6 串口参数及时序图 4.7 串口模式图 4.8 串口和中断系统 4.9 串口相关寄存器 5.串口向电脑发送信息…...
Flannel UDP 模式的优缺点
UDP 模式的特点、优缺点 优点 高兼容性:通过用户态 UDP 封装,无需内核支持 VXLAN 或其他高级网络功能,适用于旧版 Linux 内核或非标准环境。部署灵活:无需特殊内核模块或硬件支持,易于在异构环境中部署。简单实现&am…...
前端——布局方式
普通流(标准流) 所谓的标准流: 就是标签按照规定好默认方式排列. 1. 块级元素会独占一行,从上向下顺序排列。 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table 2. 行内元素会按照顺序,从左到右顺序排列&am…...
山东大学软件学院计算机图形学2025期末考题回忆版
任课教师:周元峰老师 考试时间:2025年5月13日 这次考试比之前的往年题多了写和读OpenGL代码的题目,其它和能找到的往年题(19、21、24)的差别不大。写完回忆题又发现自已错了好几个原题。。。。。。。。。。。。。。。…...