redis数据持久化

一、RDB持久化

RDB(Redis Backup File):把内存中的所有数据都记录到磁盘中,当Redis实例故障重启后,从磁盘读取快照文件,恢复数据

redis在正常停机之前会做一次持久化,但异常停机会导致数据丢失

手动命令

bash 复制代码
#使用redis主进程把内存数据写入磁盘,此操作会阻塞所有命令
save
#另起一个子进程执行rdb,避免主进程受到影响
bgsave

写在redis.conf中redis自动执行

bash 复制代码
#save 时间 key修改次数
#如果900秒内至少有1个key被修改,就拉起一个bgsave进程
save 900 1
#禁用RDB
save ""

#其他配置

#是否压缩数据文件,建议不开启,压缩会消耗cpu
rdbcompression yes
#RDB文件名称,修改名称后原名称将不会读取
dbfilename dump.rdb
#文件保存的路径目录
dir ./

bgsave执行步骤

① fork主进程得到子进程

② 子进程共享主进程的内存数据

③ 完成fork后读取内存数据并写入RDB文件

④使用新的RDB文件替换旧的RDB文件

fork采用的是copy-on-write技术

① 当主进程执行读操作时,访问共享内存

② 当主进程执行写操作时,则会拷贝一份数据,执行写操作

二、AOF持久化

AOF全称为Append Only File(追加文件),Redis处理的每一个写命令都会记录在AOF文件,可以看作是命令日志文件

bash 复制代码
#是否开启AOF,默认为no,yes表示开启
appendonly yes
#AOF文件名称
appendfilename "appendonly.aof"

#配置AOF记录的频率,有三种方式

#每执行一次写命令就立刻记录到AOF文件(性能最好,消耗最大,几乎不会丢数据)
appendfsync always
#写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案(性能折中,1s内如果宕机数据会丢失)
appendfsync everysec
#写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

AOF记录的是操作记录,RDB记录的是值

因为是记录命令,AOF文件会比RDB文件大得多,而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义,通过执行bgwriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果

bash 复制代码
bgrewriteaof

自动触发重写配置

bash 复制代码
#默认值100 AOF文件比上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
#默认64mb AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb

三、混合持久化

在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式化追加的文件的末尾

从AOF文件中查看到的就不是AOF标准格式的数据,因为其中混入的RDB格式的数据

redis5.0自动开启混合持久化

打开混合持久化:

bash 复制代码
#redis-cli 查询是否打开了混合持久化
config get aof-use-rdb-preamble

#1.永久设置:在redis.conf设置
aof-use-rdb-preamble yes

#2.通过命令行开启,重启后生效
config set aof-use-rdb-preamble yes
相关推荐
忧郁的橙子.37 分钟前
深入浅出etcd与Raft:从核心组件到数据一致性原理
数据库·etcd
鱼鳞_1 小时前
热门八股-MySQL
数据库·mysql
小尘要自信1 小时前
软件远控失效以后怎么办?玩客云 + One-KVM 实现 BIOS 级远程画面与键鼠控制
服务器·网络·数据库
这个DBA有点耶1 小时前
数据库“家谱”系列之一:关系型数据库的4大核心组件详解
数据库·mysql·架构
ClouGence1 小时前
数据库迁移同步工具 CloudCanal v6.4.0.0 发布,Oracle、SAP Hana 等同步能力再升级
数据库
ClouGence1 小时前
2026 数据库 CI/CD 工具大盘点:4 款热门工具怎么选?
数据库·后端·ci/cd
云和恩墨1 小时前
云和恩墨亮相2026数博会,与超聚变联合呈现“算力+数据”一体化管理方案
数据库
ClouGence2 小时前
数据库 CI/CD 再升级:CloudDM 4.1.0 支持多数据库发布流编排
数据库·sql·ci/cd
SelectDB2 小时前
为什么越来越多分析数据库开始重视实时更新,而不仅仅是查询性能?
大数据·数据库·数据分析