Redis(缓存)

一 什么是缓存

1. 生活上的例子

比如有一个行李箱和一个手机,每次把手机放到行李箱在拿出来肯定很麻烦,如果放到裤兜里就会方便很多,所以裤兜算作行李箱的一个缓存,不仅仅是裤兜,甚至可以一直拿在手上等其他有存储介质的东西。

说白了缓存就是用来提高效率的,比如 内存 作为 CPU 和 外设 的缓存,和接下来要讲的 Redis 作为 MySQL 的缓存,MySQL 和磁盘打交道,磁盘是外设 I/O 效率慢,并且是随机寻址就更慢了,而 Redis 工作在内存,用来缓存 MySQL 的部分数据来分摊压力再合适不过了。

二 缓存如何更新

1. 定期更新

顾名思义:每隔一段时间来对缓存进行更新,比如每个一段时间统计访问频率最多的 100 个单词写入到日志里,到了时间在同步到 Redis 进行缓存更新。

定期更新带来的问题:隔的这段时间可能某些冷门词突然就变高频了,但是定期更新,所以无法及时更新到缓存里,导致绕过 Redis ,压力就导到 MySQL 中了,为了解决这个问题引入实时更新。

2. 实时更新

顾名思义:只要查不到缓存,就去 MySQL 中查,查到了在放到缓存里。

Redis 是跑在内存中的,内存大小有限,且不止有 Redis 这一个服务在使用,所以一直更新就会导致 Redis 占用内存直到内存用尽,所以引入了缓存淘汰策略。

3. 淘汰策略
1. FIFO(先进先出)

先进缓存的先淘汰。

2. LRU(最久未访问的)

最久未访问的先淘汰。

3. LFU(最少访问次数)

最少访问次数的先淘汰。

4. Random(随机淘汰)

随机淘汰。

5. Redis 支持的淘汰选项:

Volation-LRU:在设置了过期的 Key 中淘汰最久未访问的。

AllKeys-LRU:在所有的 Key 中淘汰最久未访问的。

Volation-LFU:在设置了过期的 Key 中淘汰最少访问次数的。

AllKeys-LFU:在所有的 Key 中淘汰最少访问次数的。

AllKeys-Random:在设置了过期的 Key 中随机淘汰。

Volation-Randon:在所有的 Key 中随机淘汰。

Volation-TTL:在设置了过期的 Key 中淘汰越早过期的。

Noeviction(默认策略):没有任何淘汰机制,写超了直接报错(不适用与实时更新)。

三 缓存使用事项

1. 缓存预热

缓存更新采用实时更新的时候:

原因:

  • Redis 服务刚启动,什么也没有,压力全部到 MySQL 中,并把查到的数据缓存到 Redis,一开始 MySQL 就会承担大量的并发请求导致压力过大。

解决办法:

  • 最开始的时候把 定期更新 和 实时更新 相结合,先把预先的高频日志导到 Redis,后续在采用实时更新,避免了一开始大量并发到 MySQL。

定期更新没有缓存预热的情况。

2. 缓存穿透

当查询某些 Key,Redis MySQL 中都不存在,MySQL 压力也会增大。

原因:

  •  MySQL 删除误删了数据。
  •  Key 本身不合法。

解决办法:

  • 对不合法的 Key 检测。
  • 采用布隆过滤器提前检测 Key 是否存在。
3. 缓存雪崩

某一时间端大量的 Key 失效,导致 MySQL 压力过大。

原因:

  • 如果同一时间内设置了过期的 Key ,并且过期时间相同。
  • Redis 服务挂了。

解决办法:

  • 过期时间添加其他因子避免过期时间相同。
  • 引入集群,哨兵自动管理挂掉的 Redis 服务器。
4. 缓存击穿

某一时间端热点 Key 失效,导致 MySQL 压力过大,和缓存雪崩类似。

原因:

  • 和缓存雪崩类似。

解决办法:

  • 热点 Key 尽量不要设置过期时间。
  • 引入分布式锁,访问 MySQL 次数上限则锁住,避免 MySQL 压力过大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921742.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl简介

一、openssl是什么 OpenSSL是一个开源的、功能强大的软件库和工具包,它实现了传输层安全(TLS) 和安全套接层(SSL) 协议以及一个全面的密码学原语库。它是用 C 语言编写的,为其带来了高性能和跨平台的特性。 作为库(Library):开发者可以将其代码集成到自己的应用程序(…

左值引用与右值引用

左值和右值 左值(lvalue):在表达式结束后仍然存在,可以取地址。简单理解:有名字、有存储位置。 比如变量、数组元素、对象等。 右值(rvalue):临时值,表达式结束后就消失&…

中小企业SAP B1 HANA部署全解析:成本与云端优势

目录 云端部署成本构成与效益分析 软件许可费 硬件成本 服务费 培训费 技术优势 快速部署 弹性扩展 高可用性 云端部署适用场景 IT预算有限的中小企业 分布在不同地区的机构 需要快速上线的情况 本地部署适用场景 数据监管严格的行业 拥有完善IT基础设施企业 …

Django Channels实战:WebSocket实时通信开发

在当今Web应用开发中,实时通信功能已成为提升用户体验的关键要素。传统的HTTP请求-响应模式难以满足即时聊天、实时通知、协同编辑等场景的需求。本文将深入探讨如何利用Django Channels框架实现WebSocket通信,为你的Django项目添加实时交互能力。为什么…

大数据毕业设计选题推荐-基于大数据的懂车帝二手车数据分析系统-Spark-Hadoop-Bigdata

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

python 通过selenium调用chrome浏览器

更新selenium pip install -U selenium 下载浏览器和对应的驱动 Chrome for Testing availability 一般选稳定版本的,我是windows的就下win64的, 下载两个zip包后,把chromedriver.zip中的exe解压缩放到chrome_win64文件夹中 from selen…

Codeium:免费开源代码自动补全工具,高效管理代码片段告别开发卡壳

你有没有过这种尴尬时刻?写代码时突然想不起来常用的函数写法,比如 Python 的字典推导式,或者 MySQL 的联表查询语句,翻之前的项目文件翻半天,好不容易找到又得复制粘贴 —— 要是遇到换电脑,之前存的代码片…

嵌入式系统学习Day35(sqlite3数据库)

一.数据库 1、分类:大型中型小型 ORACLEMYSQL/MSSQL : SQLITE DBll powdb 关系型数据库 2、名词: DB数据库 select update database DBMS数据库管理系统 MIS管理信息系统 OA办公自动化 3、嵌入式数据库: sqlite3www.sqlite.org www.kernal.…

无人机自组网系统的抗干扰技术分析

由多个无人机和地面组成的MESH自组网系统是一种去中心化的无线通信网络 。系统由多个机载和地面通信终端构成,其核心特点是“无固定中心”,采用去中心化架构,所有节点地位平等 。在这种网状结构中,所有通信节点都能直接相互通信&a…

mac 安装 nginx

安装 nginx :brew install nginx检查 nginx 安装是否成功:nginx -vnginx version: nginx/1.29.1查看 nginx 启动状态:sudo brew services info nginx可以看到服务还未启动nginx (homebrew.mxcl.nginx)Running: ✘Loaded: ✘Schedulable: ✘ng…

JP4-7-MyLesson后台前端(四)

Java道经 - 项目 - MyLesson - 后台前端(四) 传送门:JP4-7-MyLesson后台前端(一) 传送门:JP4-7-MyLesson后台前端(二) 传送门:JP4-7-MyLesson后台前端(三&am…

Linux control group笔记

Linux CGroup(Control Groups)是一个强大的内核功能,用于限制、记录和隔离进程组(process groups)使用的系统资源(如 CPU、内存、磁盘 I/O、网络等)。它通过将进程分组并对这些组进行资源分配和…

小迪Web自用笔记30

Node.js原生态的js运行在前端。Node.js:他与原生态JS最大的不同,就是前端只能看到输出的代码,而看不到jS文件req接收,res回显dirname获取绝对路径提交表单 :“Post路由” 到底是什么。这是一个非常核心的Web开发概念。…

并发编程的守护者:信号量与日志策略模式解析

一、信号量 关于信号量的介绍在深入Linux内核:IPC资源管理揭秘 这篇文章当中已经做了初步的介绍了,相信大家对于信号量已经有了初步的认知了。 今天,我们就来探讨如何实现信号量。 1. 信号量的接口 //初始化信号量 //成功了,返…

conda 创建环境嵌套报错

使用conda create --prefix /path可以成功创建,有可能时默认路径冲突导致的 conda config --show 发现: envs_dirs: /root/autodl-tmp/miniconda3/envs/envs_test/path/root/autodl-tmp/miniconda3/envs/root/.conda/envs 未显式指定环境路径&#xf…

低代码核心原理总结

Web 低代码平台核心原理深度解析 1. 架构总览 Web低代码平台的核心架构包含四个关键层次: class LowCodePlatform {constructor() {this.visualEditor new VisualEditor(); // 可视化编辑器this.metaDataEngine new MetaDataEngine(); // 元数据引擎this.code…

操作系统研发工作心得体会 - 于复杂性中构建秩序

在操作系统(OS)研发这片要求极致严谨与创新的工程深海中航行数载,我的角色从一个纯粹的技术专家,逐渐演变为一个需要兼顾技术深度、系统广度与团队效能的复合型角色。这段旅程,让我深刻体会到,构建一个成功…

Excel 表格 - Excel 减少干扰、专注于内容的查看方式

Excel 减少干扰、专注于内容的查看方式 1、隐藏元素 点击 【视图】 -> 取消勾选 【网格线】 -> 取消勾选 【编辑栏】 -> 取消勾选 【标题】2、全屏显示 点击 【功能区显示选项】(工具栏右下角小箭头) -> 点击 【全屏模式】

C# Web API 前端传入参数时间为Utc

Web API 前端传入参数时间为Utc(时间相差8个小时)1.在Program.csbuilder.Services.AddControllers().AddJsonOptions(options > {// 序列化时将时间转换为本地时间(北京时间)options.JsonSerializerOptions.Converters.Add(new…

AI Agent开发入门:Semantic Kernel构建智能邮件助手

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,80G大显存,按量计费,灵活弹性,顶级配置,学生更享专属优惠。 引言:AI Agent——下一代人机交互范式 在人工智能技术…