14天 -- Redis 的持久化机制有哪些?Redis 主从复制的实现原理是什么? Redis 数据过期后的删除策略是什么?
Redis 的持久化机制有哪些?
Redis 是一种高性能的键值存储系统,主要用于缓存、消息队列等场景。为了防止数据丢失,Redis 提供了多种持久化机制,主要包括以下两种:
1. RDB(Redis Database Backup)
RDB 是一种快照持久化机制,它会在指定的时间间隔内将内存中的数据集快照保存到磁盘上的一个 RDB 文件中(通常是 .rdb 文件)。RDB 文件是一个紧凑的二进制文件,适合用于备份和灾难恢复。
RDB 的优点:
- 数据恢复速度快:由于 RDB 文件是紧凑的二进制格式,恢复数据时速度较快。
- 适合备份和迁移:RDB 文件可以方便地用于备份和迁移,因为它是一个完整的数据快照。
- 对性能影响小:RDB 的持久化操作可以通过
fork子进程完成,不会阻塞主进程的正常操作。
RDB 的缺点:
- 数据丢失风险:如果 Redis 服务器在两次快照之间发生故障,可能会丢失最后一次快照之后的数据。
- 文件大小可能较大:随着数据量的增加,RDB 文件可能会变得很大,对磁盘空间有一定要求。
配置 RDB:
RDB 的持久化可以通过 Redis 配置文件(redis.conf)进行设置,例如:
save 900 1
save 300 10
save 60 10000
上述配置表示:
- 如果至少有 1 个键发生变化,900 秒后保存一次快照。
- 如果至少有 10 个键发生变化,300 秒后保存一次快照。
- 如果至少有 10000 个键发生变化,60 秒后保存一次快照。
2. AOF(Append Only File)
AOF 是一种日志持久化机制,它会将每个写操作命令追加到一个日志文件(通常是 appendonly.aof 文件)中。当 Redis 重启时,它会重新执行 AOF 文件中的命令来恢复数据。
AOF 的优点:
- 数据安全性高:AOF 会记录每个写操作,因此在发生故障时,数据丢失的可能性极小。
- 可配置性高:可以通过配置文件调整 AOF 的写入策略,例如同步频率(
appendfsync参数)。
AOF 的缺点:
- 文件体积可能较大:AOF 文件会记录所有的写操作,因此文件体积可能会比 RDB 文件大很多。
- 恢复速度较慢:由于需要重新执行 AOF 文件中的命令,恢复数据的速度可能比 RDB 慢。
配置 AOF:
AOF 的持久化也可以通过 Redis 配置文件进行设置,例如:
appendonly yes
appendfsync everysec
上述配置表示:
- 开启 AOF 持久化。
- 每秒将 AOF 日志同步到磁盘一次(
everysec)。其他可选值包括:always:每次写操作都同步到磁盘,数据安全性最高,但性能开销较大。no:由操作系统决定何时同步,性能最好,但数据丢失风险较高。
3. 混合持久化(RDB + AOF)
Redis 4.0 以后引入了混合持久化模式,允许同时使用 RDB 和 AOF。在这种模式下,AOF 文件会以 RDB 文件为基础,然后追加后续的写操作。这种方式结合了 RDB 和 AOF 的优点,既能快速恢复数据,又能保证数据的完整性。
配置混合持久化:
appendonly yes
save 900 1
开启 AOF 并设置 RDB 快照保存规则。
总结
- 如果对数据丢失的容忍度较高,可以使用 RDB。
- 如果需要更高的数据安全性,建议使用 AOF 或混合持久化。
- 在实际使用中,可以根据业务需求和性能要求选择合适的持久化策略。
Redis 主从复制的实现原理是什么?
Redis 的主从复制(Master-Slave Replication)是一种常见的高可用性和数据冗余机制,用于将数据从主节点(Master)同步到一个或多个从节点(Slave)。主从复制的实现原理主要涉及以下几个关键步骤和机制:
1. 连接建立与初始化
- 从节点发起连接:从节点(Slave)主动连接到主节点(Master),并发送
REPLCONF listening-port <port>命令,告知主节点自己的监听端口。 - 主节点接受连接:主节点接受从节点的连接请求,并为从节点分配一个客户端连接。
- 从节点发送复制命令:从节点发送
REPLICAOF <master_ip> <master_port>命令,正式请求开始复制操作。
2. 全量复制(Full Sync)
全量复制是主从复制的初始阶段,用于将主节点的完整数据同步到从节点。这个阶段主要包括以下步骤:
(1)主节点生成 RDB 文件
- 当从节点请求复制时,主节点会启动一个后台进程(
bgsave),生成一个 RDB 文件。这个 RDB 文件包含了主节点当前内存中的所有数据。 - 在生成 RDB 文件的过程中,主节点会继续处理客户端的写请求,并将这些写操作记录到一个缓冲区(称为 复制积压缓冲区,Replication Backlog Buffer)。
(2)发送 RDB 文件
- 一旦 RDB 文件生成完成,主节点会将这个文件发送给从节点。
- 从节点接收到 RDB 文件后,会加载该文件,将其内容加载到内存中,从而恢复主节点的数据快照。
(3)同步缓冲区中的命令
- 在 RDB 文件传输完成后,主节点会将复制积压缓冲区中的所有命令发送给从节点。
- 从节点会依次执行这些命令,以确保其数据与主节点一致。
3. 部分复制(Partial Sync)
部分复制用于处理主从复制过程中可能出现的网络中断等情况。在全量复制完成后,主从节点会进入部分复制阶段,主节点会持续将写操作同步给从节点。
(1)复制积压缓冲区(Replication Backlog Buffer)
- 主节点维护一个固定大小的环形缓冲区,用于存储最近执行的写操作命令。这个缓冲区的大小可以通过
repl-backlog-size参数配置。 - 当从节点重新连接时,主节点会检查从节点请求的偏移量是否在缓冲区范围内。如果在范围内,则主节点会从缓冲区中恢复丢失的命令并发送给从节点。
(2)偏移量同步
- 主节点和从节点各自维护一个复制偏移量(
replication offset),用于记录已经同步的命令数量。 - 从节点在请求部分复制时,会发送自己的偏移量给主节点。主节点根据偏移量判断是否可以进行部分复制。
4. 命令传播(Command Propagation)
在主从复制过程中,主节点会将所有写操作命令实时发送给从节点,从节点会依次执行这些命令以保持与主节点的数据一致性。
- 命令传播的时机:主节点在执行写操作后,会立即将命令发送给从节点。
- 从节点的写入模式:从节点在执行命令时,会以只读模式运行,不会接受外部的写操作。
5. 故障转移(Failover)
在主从复制中,如果主节点发生故障,从节点可以被提升为主节点(通过哨兵 Sentinel 或集群 Cluster 实现)。故障转移的机制包括:
- 从节点选举:从多个从节点中选择一个作为新的主节点。
- 数据同步:新的主节点可能会触发一次全量复制,以确保其他从节点与自己保持一致。
6. 配置与优化
- 主节点配置:在主节点的
redis.conf文件中,可以通过slaveof或replicaof指定从节点。 - 从节点配置:从节点需要配置
masterauth(如果主节点有密码)和repl-ping-slave-period等参数,以优化复制性能。 - 复制积压缓冲区大小:通过
repl-backlog-size参数调整缓冲区大小,以平衡内存占用和部分复制的能力。
总结
Redis 主从复制的实现原理包括全量复制、部分复制、命令传播和故障转移等机制。全量复制用于初始数据同步,部分复制用于处理网络中断后的数据恢复,命令传播用于实时保持数据一致性。通过这些机制,Redis 能够实现高效的数据冗余和高可用性。
Redis 数据过期后的删除策略是什么?
Redis 提供了多种数据过期机制,允许用户为键设置生存时间(TTL,Time To Live)。当键的生存时间到期后,Redis 会根据其内部的删除策略来处理这些过期的键。Redis 的删除策略主要分为三种:惰性删除(Lazy Deletion)、定期删除(Periodic Deletion) 和 内存淘汰(Memory Eviction)。以下是它们的具体实现和特点:
1. 惰性删除(Lazy Deletion)
惰性删除是指 Redis 不主动检查键是否过期,而是当用户尝试访问某个键时,Redis 才会检查该键是否已经过期。如果键已经过期,Redis 会删除该键并返回一个空值。
工作原理:
- 当用户执行
GET、SET、DEL等命令时,Redis 会检查目标键是否过期。 - 如果键过期,则直接删除该键,并返回相应的结果(例如
nil表示键不存在)。 - 如果键未过期,则正常处理用户的请求。
优点:
- 资源消耗低:惰性删除不会主动占用 CPU 资源去检查过期键,因此对性能的影响最小。
- 精确性高:只有当键被访问时,才会检查是否过期,不会误删未被访问的过期键。
缺点:
- 内存占用可能较高:如果大量键过期但未被访问,这些键可能会一直占用内存,直到被访问或 Redis 重启。
- 对业务逻辑有要求:依赖于用户主动访问键,如果某些键从未被访问,可能会导致内存泄漏。
2. 定期删除(Periodic Deletion)
定期删除是指 Redis 会定期检查过期键并删除它们。Redis 通过一个后台线程(serverCron)周期性地执行删除操作。
工作原理:
- Redis 设置了一个时间间隔(默认为每秒多次),在每个时间间隔内,后台线程会随机检查部分键的过期情况。
- 如果发现某个键已经过期,后台线程会将其删除。
- 为了防止删除操作占用过多 CPU 资源,Redis 会限制每次删除操作的执行时间。
优点:
- 内存占用可控:定期删除可以主动清理过期键,避免内存被大量过期键占用。
- 对性能影响有限:通过限制每次删除操作的执行时间,避免了对性能的过大影响。
缺点:
- 删除不及时:由于是定期检查,某些过期键可能在检查间隔内仍然占用内存。
- 资源占用:虽然有限制,但定期删除仍然会占用一定的 CPU 资源。
3. 内存淘汰(Memory Eviction)
内存淘汰是指当 Redis 的内存使用量达到配置的上限时,Redis 会根据一定的策略主动删除一些键,以释放内存空间。内存淘汰策略主要用于 Redis 作为缓存时的场景。
工作原理:
- 当 Redis 的内存使用量接近或超过配置的
maxmemory限制时,Redis 会根据配置的淘汰策略选择要删除的键。 - 常见的淘汰策略包括:
- LRU(Least Recently Used):删除最久未使用的键。
- LFU(Least Frequently Used):删除使用频率最低的键。
- TTL(Time To Live):优先删除即将过期的键。
- Random:随机删除键。
- AllKeys LRU/LFU:从所有键中选择 LRU/LFU 的键删除。
- volatile LRU/LFU:仅从设置了过期时间的键中选择 LRU/LFU 的键删除。
优点:
- 防止内存溢出:通过主动删除键,避免内存使用量超过限制,导致 Redis 崩溃。
- 灵活性高:用户可以根据业务需求选择合适的淘汰策略。
缺点:
- 数据丢失风险:某些重要数据可能会被误删,因此需要谨慎配置淘汰策略。
- 对性能影响:淘汰操作可能会占用一定的 CPU 资源,尤其是在内存压力较大时。
总结
Redis 的数据过期删除策略包括惰性删除、定期删除和内存淘汰。它们各有优缺点,适用于不同的场景:
- 惰性删除:适合对内存占用不敏感的场景,优点是性能开销小。
- 定期删除:适合需要主动清理过期键的场景,优点是内存占用可控。
- 内存淘汰:主要用于 Redis 作为缓存时,防止内存溢出。
在实际使用中,Redis 默认会同时使用惰性删除和定期删除策略,以平衡性能和内存占用。用户可以根据业务需求调整这些策略,例如通过配置 maxmemory 和淘汰策略来优化 Redis 的行为。
相关文章:
14天 -- Redis 的持久化机制有哪些?Redis 主从复制的实现原理是什么? Redis 数据过期后的删除策略是什么?
Redis 的持久化机制有哪些? Redis 是一种高性能的键值存储系统,主要用于缓存、消息队列等场景。为了防止数据丢失,Redis 提供了多种持久化机制,主要包括以下两种: 1. RDB(Redis Database Backupÿ…...
《深度学习实战》第10集:联邦学习与隐私保护
第10集:联邦学习与隐私保护 2025年3月4日更新了代码,补充了实例程序运行截图 和 如何提高模型准确率的方法 系统梳理 集集精彩 代码验证 保证实战 随着数据隐私问题日益受到关注,联邦学习(Federated Learning) 作为一…...
如何解决跨域请求的问题(CORS)?
文章目录 1. 引言2. 理解 CORS2.1 CORS 基本概念2.2 同源策略与跨域分类 3. CORS 的核心机制3.1 预检请求(Preflight Request)3.2 简单请求 4. 服务器端配置 CORS4.1 关键响应头4.2 Node.js (Express) 示例4.3 其他后端语言配置 5. 前端处理 CORS 请求5.…...
【数据结构】二叉树总结篇
遍历 递归 递归三部曲: 1.参数和返回值 2.终止条件 3.单层逻辑(遍历顺序) var preorderTraversal function(root) { // 第一种let res[];const dfsfunction(root){if(rootnull)return ;//先序遍历所以从父节点开始res.push(root.val);//递归…...
软考-数据库开发工程师-3.1-数据结构-线性结构
第3章内容比较多,内容考试分数占比较大,6分左右 线性表 1、线性表的定义 一个线性表是n个元素的有限序列(n≥0),通常表示为(a1,a2, a3,…an). 2、线性表的顺序存储(顺序表) 是指用一组地址连续的存储单元依次存储线性表中的数据元…...
【五.LangChain技术与应用】【2.LangChain虚拟环境搭建(下):环境优化与调试】
一、Docker化部署:别让你的环境成为薛定谔的猫 经历过"在我机器上能跑"惨案的老铁都懂,传统虚拟环境就像个黑盒子。去年我帮客户部署LangChain应用,因为glibc版本差了0.1,整个服务直接崩成烟花。从那天起,我所有项目都强制上Docker! Dockerfile生存指南: #…...
deepseek+mermaid【自动生成流程图】
成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…...
Java实现大数据量导出报表
一、实现方式 在Java中,导出数据到Excel有多种方式,每种方式都有其优缺点,适用于不同的场景。以下是常见的几种方式及其特点: 1.1 Apache POI Apache POI 是 Java 中最流行的库,支持读写 Excel 文件(包括…...
在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值
文章目录 引言轻松实现 `<el-option>` 的默认值为 `null`I 实现方式监听清空事件 【推荐】使用 v-model 绑定 null添加一个值为 null 的选项处理 null 值的显示引言 背景:接口签名规则要求空串参与,空对象不参与签名计算 // 空字符串“” 参与签名组串,null不参与签…...
Spring Boot 接口 JSON 序列化优化:忽略 Null 值的九种解决方案详解
一、针对特定接口null的处理: 方法一:使用 JsonInclude 注解 1.1 类级别:在接口返回的 DTO 类或字段 上添加 JsonInclude 注解,强制忽略 null 值: 类级别:所有字段为 null 时不返回 JsonInclude(Js…...
解码未来!安徽艾德未来智能科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!
在2025年“GAS消费电子科创奖”评选中,安徽艾德未来智能科技有限公司提交的“讯飞AI会议耳机iFLYBUDS Pro 2”,在技术创新性、设计创新性、工艺创新性、智能化创新性及原创性五大维度均获得评委的高度认可,荣获“产品创新奖”。 这一殊荣不仅…...
Velox 之 Expression
Round 函数 velox/functions/prestosql/Arithmetic.h template <typename T> struct RoundFunction {template <typename TInput>FOLLY_ALWAYS_INLINE voidcall(TInput& result, const TInput& a, const int32_t b = 0) {result = round(a, b);} };/// R…...
【零基础到精通Java合集】第二十四集:ZGC收集器详解
课程标题:ZGC收集器——突破停顿时间极限的下一代垃圾回收器(15分钟) 目标:掌握ZGC的核心技术原理、适用场景与调优策略,理解其如何实现亚毫秒级停顿 0-1分钟:课程引入与ZGC设计目标 以“高速公路无障碍通行”类比ZGC核心思想:通过染色指针与读屏障技术,实现垃圾回收…...
力扣hot100刷题——栈
文章目录 69.有效的括号题目描述思路:栈code 70.最小栈题目描述思路:双栈法code优化:单栈法code 71.字符串解码题目描述思路:栈code 73.每日温度题目描述思路:单调栈code 74.柱状图中最大的矩形题目描述思路࿱…...
TMS320F28P550SJ9学习笔记2:Sysconfig 配置与点亮LED
今日学习使用Sysconfig 对引脚进行配置,并点亮开发板上的LED4 与LED5 我的单片机开发板平台是 LAUNCHXL_F28P55x 我是在上文描述的驱动库C2000ware官方例程example的工程基础之上进行添加功能的 该例程路径如下:D:\C2000Ware_5_04_00_00\driverlib\f28p…...
STM32MP1xx的启动流程
https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根据提供的知识库内容,以下是STM32 MPU启动链的详细解析: 1. 通用启动流程 STM32 MPU启动分为多阶段,逐步初始化外设和内存,并建立信任链: 1.1 ROM代码&…...
开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维
开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维 文|黄兴抗 电子信息工程专业 Koupleless 社区贡献者 就读于南昌师范学院,电子信息工程专业的大三学生。 本文 2634 字,预计阅读 7 分钟 今天 SOFAStack 邀…...
健康养生:开启活力人生的钥匙
在快节奏的现代生活中,健康养生已成为我们追求美好生活的关键。它不仅关乎身体的强健,更与心灵的宁静息息相关。 合理饮食是健康养生的基石。多吃蔬菜、水果,它们富含维生素与矿物质,为身体提供充足养分。全谷物食品也是不错的选…...
HTTP 与 HTTPS 协议:从基础到安全强化
引言 互联网的消息是如何传递的? 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议:互联网的基石 定义 HTTP(英文:HyperText Transfer Protocol,缩写:HTTP),即超文本传输协…...
项目工坊|Python驱动淘宝信息爬虫
目录 前言 1 完整代码 2 代码解读 2.1 导入模块 2.2 定义 TaoBao 类 2.3 search_infor_price_from_web 方法 2.3.1 获取下载路径 2.3.2 设置浏览器选项 2.3.3 反爬虫处理 2.3.4 启动浏览器 2.3.5 修改浏览器属性 2.3.6 设置下载行为 2.3.7 打开淘宝登录页面 2.3.…...
SQLite Alter 命令详解
SQLite Alter 命令详解 SQLite 是一种轻量级的数据库,广泛用于各种嵌入式系统、移动应用和小型项目。SQLite 的ALTER TABLE命令用于修改已存在的表结构,包括添加、删除或修改列,以及重命名表等操作。本文将详细解析SQLite的ALTER TABLE命令&…...
【Linux】冯诺依曼体系结构-操作系统
一.冯诺依曼体系结构 我们所使用的计算机,如笔记本等都是按照冯诺依曼来设计的: 截止目前,我们所知道的计算机都是由一个一个的硬件组装起来的,这些硬件又由于功能的不同被分为了输入设备,输出设备,存储器…...
mapbox进阶,使用点类型geojson加载symbol符号图层,用于标注带图标的注记,且文字居中在图标内,图标大小自适应文字
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象…...
布隆过滤器(附带位图讲解)
提到位图,我们首先想到的应该是它的两面定义: 位图图像(bitmap),亦称为点阵图或栅格图像,是由称作像素(图片元素)的单个点组成的。位图是指内存中连续的二进制位,用于对…...
【芯片设计】AI偏车载芯片前端设计工程师面试记录·20250304
【芯片前端设计面试经验专栏介绍】 专栏聚焦数字芯片前端设计核心技术与面试方法论,涵盖架构设计、RTL开发、验证方法学、低功耗设计、时序收敛等高频考点,深入解析行业头部企业的面试真题与设计场景。内容包含但不限于: 知识点系统梳理 :从Verilog/SV语法陷阱、FSM设计模式…...
2024北京理工大学计算机复试上机真题
2024北京理工大学计算机复试上机真题 2024北京理工大学计算机考研复试上机真题 在线评测:https://app2098.acapp.acwing.com.cn/ 等腰梯形 题目描述 请输入高度h,输入一个高为h,上底边长为h的等腰梯形(例如h4,图形…...
CC++的内存管理
目录 1、C/C内存划分 C语言的动态内存管理 malloc calloc realloc free C的动态内存管理 new和delete operator new函数和operator delete函数 new和delete的原理 new T[N]原理 delete[]的原理 1、C/C内存划分 1、栈:存有非静态局部变量、函数参数、返回…...
Redis是什么?如何使用Redis进行缓存操作?
Redis(Remote Dictionary Server)是一款高性能的内存键值存储系统,广泛用于缓存、消息队列、会话存储和实时数据处理等场景。它基于内存存储,支持多种数据结构,如字符串、列表、集合、有序集合和哈希表等,具…...
【商城实战(2)】商城架构设计:从底层逻辑到技术实现
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
USB 模块 全面解析(一)
本文是我整理的一些 USB 的学习心得,希望能对大家有所帮助。 文章目录 前言🍒 USB 基本概述🍒 USB 结构框架🍉硬件框架🍉 软件框架 🍒 USB 电气信号🍉 USB 硬件线路🍉 信号电平&…...
