一、Redis 的持久化机制有哪些?**

Redis 提供两种主要的持久化机制:

RDB(Redis DataBase)快照持久化
  • 定期将 Redis 中的数据以“快照”的形式写入磁盘(生成 .rdb 文件)。
  • 启动 Redis 时会加载 .rdb 文件恢复数据。
  • 触发方式:
    • 手动执行 SAVEBGSAVE 命令。
    • 根据配置(如 save 900 1)定期自动触发。
  • 优点:
    • 恢复速度快,占用磁盘小。
  • 缺点:
    • 异常宕机可能会丢失最近修改的数据(非实时)。
AOF(Append Only File)追加日志持久化
  • 将每次写操作(如 SET, HSET, INCR 等)以日志方式记录到 .aof 文件中。
  • 启动 Redis 时重放 .aof 日志以恢复数据。
  • 刷新策略:
    • always:每次操作都写入磁盘,最安全但性能差。
    • everysec(默认):每秒写一次,性能与安全的折中。
    • no:完全由操作系统控制刷盘时机。
  • 优点:
    • 持久化更可靠,可恢复最近的数据。
  • 缺点:
    • 文件比 RDB 大,恢复速度慢。
混合持久化(Redis 4.0+)
  • 同时使用 AOF 和 RDB 优势。
  • RDB 保存大部分数据,AOF 记录最后的增量变化。
  • 适用于既要快速恢复也要数据尽量完整的场景。

总结一张图(文字版):

机制类型描述优缺点
RDB快照形式保存数据到硬盘快速恢复、可能丢数据
AOF每次写操作记录日志数据更完整、文件大
主从复制主节点写、从节点读高可用、读写分离
过期删除定时 / 惰性 / 定期兼顾性能和内存释放

🏢 实际大厂方案举例(简化版)

公司/场景持久化策略说明
阿里巴巴关闭持久化(缓存场景)Redis 宕机自动重建缓存,不做持久化
字节跳动AOF everysec + RDB 混合用于关键服务,定期冷备 RDB
京东主从复制 + AOF + 异地灾备高可用架构,主机持久化 AOF,从节点只读
腾讯云 Redis默认开启 AOF everysec + RDB提供用户可选关闭
美团自研容器化 Redis + AOF everysec使用混合持久化恢复用户 session 数据

🧠 总结建议

需求类型推荐持久化方案理由
缓存为主、能容忍丢失不持久化最佳性能
数据重要、不能丢AOF everysec + RDB高可靠性恢复
启动速度要求高RDB + 备份定期触发恢复快,节省磁盘
高可用架构主从 + 哨兵 + 持久化容灾能力强

二、Redis 主从复制的实现原理

Redis 主从复制(Replication)用于实现读写分离、数据备份和高可用架构。

实现流程:
  1. 从节点发送 SYNC 请求:
    • 启动后通过配置或命令(如 SLAVEOF)向主节点发起复制请求。
  2. 主节点执行 RDB 快照:
    • 执行 BGSAVE 生成 RDB 快照,将数据发送给从节点。
  3. 从节点加载快照:
    • 清空原有数据后加载主节点传过来的 RDB 文件。
  4. 复制增量写命令:
    • 主节点在 RDB 传输完后将期间的写命令缓存在 replication backlog buffer 中,一并发给从节点。
    • 此后主节点每执行一次写命令就同步给所有从节点。
特点:
  • 异步复制: 默认是异步,但 Redis 6.0 起支持部分同步机制。
  • 断线重连:
    • 若断线,从节点尝试“部分重同步”(基于 runIdoffset)。
    • 不行时才进行完整的 RDB + AOF 同步。

三、 Redis 数据过期后的删除策略

Redis 为了释放内存,提供了三种删除过期 key 的策略:

定时删除(主动删除)
  • 给 key 设置了过期时间后,Redis 会为其设置一个定时器,到时间自动删除。
  • 优点: 内存及时释放。
  • 缺点: 会影响 CPU 性能(每个 key 都定时检查代价高)。
惰性删除(被动删除)
  • 客户端访问某个 key 时,Redis 会先检查是否过期,若过期就删除。
  • 优点: 不浪费 CPU。
  • 缺点: 若没有访问,过期 key 会长期占内存。
定期删除(定期抽样删除)
  • Redis 会周期性(默认 100ms)随机抽取部分 key 进行过期检查并删除。
  • 优点: 兼顾性能与内存控制。
  • 缺点: 某些 key 可能在长时间内未被检查到,造成内存浪费。

四、淘汰策略

策略名称 策略说明 适用场景
noeviction 不淘汰,直接拒绝写入操作(默认策略) 数据不能丢的场景(如金融)
allkeys-lru 所有键中,淘汰最久未使用的(Least Recently Used) 通用缓存、Web缓存
volatile-lru 只在设置了过期时间(TTL)的键中,淘汰最久未使用的 局部热数据缓存
allkeys-random 所有键中随机淘汰 对访问频率无强依赖的缓存
volatile-random 只在设置了过期时间的键中随机淘汰 弱一致性、低优先级缓存
volatile-ttl 只淘汰 TTL 剩余时间最短的 key(即快要过期的 key) 想优先保留长期 key

五、LUR/随机策略内部机制

✅ allkeys-lru 是最常用的策略
Redis 内部维护了访问信息(LRU/approximate LRU),采用 采样+近似LRU算法:

抽样 5 个 key(默认),比较其访问时间,淘汰最久未使用的。
可以通过 maxmemory-samples 设置样本数(越大越精准,但耗 CPU):

六、实践建议

💡 推荐策略组合:
场景 推荐配置
通用缓存 allkeys-lru(经典)
只缓存部分热点数据 volatile-lru + 设置 TTL
极限性能下,快速释放空间 allkeys-random
数据敏感/不能自动淘汰 noeviction(程序层判断+降级处理)

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

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

相关文章

深入理解 Maven POM 文件:核心配置详解

前言 在 Java 开发领域,Apache Maven 是一个强大的项目管理和构建自动化工具。而pom.xml文件,作为 Maven 项目的“心脏”,定义了项目的方方面面。本文将带你深入了解pom.xml中最常用和最重要的配置项,帮助你快速掌握 Maven 的核心…

嵌入式学习的第四十天-51单片机

一、基本框架第一阶段:1980年、Intel英特尔MCS-51系列:8051型号单片机、工业控制领域、由MCU市场->CPU市场。1、CPU(Central Processing Unit,中央处理单元)‌是计算机的核心部件,负责执行计算机指令和处…

Linux(17)——Linux进程信号(上)

目录 一、信号速识 ✍️生活中的信号 ✍️技术上的信号 ✍️信号的发送和记录 ✍️信号处理概述 二、产生信号 ✍️通过终端产生信号 ✍️通过函数发送信号 ✍️通过软件产生信号 ✍️通过硬件产生信号 一、信号速识 ✍️生活中的信号 你在网上买了很多件商品&…

使用pytest对接口进行自动化测试

上篇博客中讲述了什么是接口测试,已经自动化接口测试流程,这篇博客总结如何实现接口自动化测试(一)requestsrequests库是Python对HTTP通信的一个工具,将http协议操作封装成简单的接口,能够让我们高效的编写…

信息安全及防火墙总结

1.1 信息安全现状及挑战信息安全概述 信息安全:防止任何对数据进行未授权访问的措施,或者防止造成信息有意无意泄漏、破坏、 丢失等问题的发生,让数据处于远离危险、免于威胁的状态或特性。 网络安全:计算机网络环境下的信息安全。…

20250808组题总结

A - A Pak Chanek 有一个包含 nnn 个正整数的数组aaa。由于他正在学习如何计算两个数字的向下取整平均值,他希望在他的数组 aaa 上进行练习。当数组 aaa 至少有两个元素时,Pak Chanek 将执行以下三步操作: ∙\bullet∙选择两个不同的索引 ii…

【Python 语法糖小火锅 · 第 5 涮 · 完结】

一、糖味一句话 Python 3.10 的 match-case 把「类型 值 嵌套」一次性拆开, 可读性 10,bug 数 10,if-elif 可以安心退休了。二、1 行示例 3 连发 # ① 值匹配 match status:case 200: msg "ok"case 404: msg "not found&q…

写 SPSS文件系统

写入 SPSS 系统文件(.sav、.zsav) 以下为相关的 SPSS 命令(以大写形式 CAPS 呈现) savFileName : str SPSS 数据文件的文件名 以 .sav 结尾的文件使用旧版压缩方案压缩。 以 _uncompressed.sav 结尾的文件不压缩,这在需…

云服务器--阿里云OSS(1)【阿里云OSS简单介绍以及环境准备】

一、阿里云OSS简介 定义:阿里云OSS(Object Storage Service)是阿里云提供的对象存储服务,支持海量数据的存储和管理。 存储方式:基于“对象存储”,文件以对象形式存储,无需管理文件系统结构。 …

R语言代码加密(1)

1、使用Compiler包library(compiler) cmpfile("1.R")#实现对R脚本的整体加密 compiler::loadcmp("1.Rc")#调用R脚本存在问题是,该方法仅对脚本进行加密。在加载生成的Rc文件后,脚本内具体函数,是可以看到具体内容的。针对…

【面试场景题】通过LinkedHashMap来实现LRU与LFU

文章目录一、LRU与LFU的概念1. LRU(Least Recently Used,最近最少使用)2. LFU(Least Frequently Used,最不经常使用)二、LinkedHashMap的特性三、用LinkedHashMap实现LRU实现代码:原理说明&…

第5章 Excel公式与函数应用指南(2):数学函数

5.2 数学函数 Excel作为强大的数据处理工具,其内置的数学函数体系为用户提供了丰富的计算能力。从基础的四则运算到复杂的指数对数计算,从简单的数值舍入到专业的矩阵运算,Excel的数学函数几乎可以满足各类计算需求。 本节将重点为您解析七个常用且实用的数学函数:求和函…

mysql复制连接下的所有表+一次性拷贝到自己的库

1.导出链接下的所有数据mysqldump -h 地址 -u 数据库名 -p --all-databases --single-transaction --master-data2 > all_dbs.sql2.导入自己的库mysql -h 127.0.0.1 -u root -p < all_dbs.sql3.指定导出某些库mysqldump -u root -p --databases db1 db2 db3 > /path/t…

开发手札:UnrealEngine和Unity3d坐标系问题

最近把一套网络模块和一套组件模块从u3d改造到ue4。网络模块通用性很高&#xff0c;毕竟协议都是通用网络协议&#xff0c;改造后没啥问题。但是改造组件模块的时候就遇到了问题。首先&#xff0c;unity3d的坐标系是标准左手坐标系&#xff0c;如下&#xff1a;同时自己的几何算…

QML 鼠标穿透

事件&#xff1a; 有一个输入框(TextField)&#xff0c;需要实现鼠标悬浮时改变边框颜色&#xff0c;鼠标移出后恢复原来边框颜色&#xff1b; 这时如果需要实现此功能&#xff0c;就得使用到MouseArea&#xff0c;鼠标操作区域填充满整个TextField。 然后实现鼠标移入移入出的…

VR 设备 PCB 怎样凭借高频材料达成高速传输

VR 设备的沉浸式体验依赖于高分辨率图像与低延迟交互&#xff0c;这要求设备内部数据传输速率达到 10Gbps 以上&#xff0c;而印制线路板&#xff08;PCB&#xff09;作为信号传输的核心载体&#xff0c;其材料性能直接决定传输效率。高频材料凭借低介电常数&#xff08;Dk&…

Oracle字段操作

1. 新增字段 -- 新增字段 ALTER TABLE MES.WT_SUPPLEMENT_RECORD ADD (PAR_ATTR3 NUMBER DEFAULT NULL);2. 修改字段类型 -- 修改字段类型 ALTER TABLE MES.WT_SUPPLEMENT_RECORD MODIFY (PAR_ATTR3 VARCHAR2(32));3. 删除字段 -- 删除字段 ALTER TABLE MES.WT_SUPPLEMENT_RECO…

【原创】基于 Flask 的简单文件收集器

在单位内网环境中&#xff0c;我经常需要收集 pdf 格式的记录表。于是我基于 ai ide&#xff0c;开发了一个基于 Flask 开发的轻量级文件上传服务项目&#xff0c;部署在单位飞腾芯的银河麒麟系统上&#xff08;当然由于 python 的跨平台&#xff0c;在 windows 和 mac 上也可部…

学习Java的Day28

今天在昨天完成的留言板项目基础上&#xff0c;我进一步开发了一个酒店房型管理系统。该系统采用MVC架构&#xff0c;主要功能是对酒店房型信息进行增删改查操作。数据库设计方面&#xff0c;我创建了hotel_room_type表&#xff0c;包含以下字段&#xff1a;id&#xff1a;主键…

Leetcode——556. 下一个更大元素 III

题目链接&#xff1a;556. 下一个更大元素 III &#xff08;由于图片上传失败&#xff0c;不贴原题目了&#xff0c;有需要可以前往力扣查看&#xff09; 本文给出该题的单调栈做法&#xff0c;同时绕过所有库函数&#xff0c;所有逻辑均自行实现。 本题的思路就是从右向左按…