Redis持久化配置和概念

Redis持久化配置和概念

Redis v1.1之后的版本均支持RDB,AOF,一共支持3种持久化模式:RDB,AOF,RDB+AOF

  • RDB:快照模式(默认),将内存中的数据以快照的形式定期写入磁盘中
    • 优点
      1. 备份速度快
      2. 文件小:RDB文件采用二进制格式,文件相对AOF文件更小
      3. 恢复速度快
    • 缺点
      1. 数据丢失:由于RDB是定期快照,Redis服务崩溃后,只能恢复到上一次持久化的数据,而上一次持久化操作到服务崩溃这段时间内所有修改/新增的数据均丢失。
      2. 消耗CPU与内存:执行RDB持久化时,Redis会创建一个子进程来遍历内存中的所有数据并写入磁盘。这个过程会消耗内存和CPU资源,可能会影响到Redis的正常性能
  • AOF:命令追加模式:Redis以追加的形式向AOF文件写入每次操作(增量保存),将Redis执行过的所有写指令记录下来(不记录读操作),且只许追加文件但不许改写文件。Redis重启时会根据AOF文件中的写指令从头到尾执行完成数据恢复工作
    • 优点
      1. 数据完整度高
      2. 实时性
      3. AOF文件阅读容易
    • 缺点
      1. 文件体积大:长时间运行的Redis。随着时间的推移,AOF文件会变得越来越大
      2. 恢复时间长:Redis重启并恢复数据时,按照顺序执行AOF文件中的所有命令,导致恢复时间较长
  • RDB+AOF:混合模式,在开启混合持久化的情况下,AOF重写时会把Redis的持久化数据,以RDB的格式写入到AOF文件的开头,之后的数据再以AOF的格式追加到文件的末尾
    • 优点
      1. 持久化AOF文件小
      2. 数据恢复速度基于AOF和RDB之间
      3. 数据不易丢失
    • 缺点
      1. 性能影响:在AOF重写过程中,Redis需要同时维护旧的AOF文件和新的混合持久化文件,这可能会占用额外的内存和磁盘资源,对Redis的性能产生一定影响
      2. 文件依赖性:混合持久化文件同时依赖于RDB和AOF两部分数据。如果RDB部分或AOF部分损坏或丢失,那么整个混合持久化文件可能无法完全恢复数据或只能恢复部分数据。
      3. 配置复杂

RDB配置

修改redis.conf文件

# 100s内一共有10次修改key的操作触发持久化备份
save 100 10
# 备份文件名
dbfilename dump.rdb
# 压缩RDB文件,默认yes开启
rdbcompression yes
# RDB文件存储路径
dir ./
# 快照创建出错后,redis是否继续执行写操作
stop-writes-on-bgsave-error yes
# 存储快照后,redis使用CRC64算法数据校验,此操作会增加10%的性能消耗
rdbchecksum yes

redis.conf中save配置可以多个,先满足的条件就会触发;而停止RDB持久化,如下配置

save " "

RDB触发方式

  • 被动触发:在redis.conf中配置save项即可。
  • 手动触发:在redis中使用命令触发,命令如下
    • save:阻塞式持久化:执行命令Redis开始执行备份操作,在备份操作执行完毕之前,将不再处理其他请求,其他请求将被挂起。
    • bgsave:非阻塞式持久化,执行命令Redis会Fork一个子进程,这个子进程负责执行持久化,而父进程则继续处理请求,客户端命令不会被阻塞。

AOF配置

# AOF开关
appendonly no
# AOF文件名(可配置全路径)
appendfilename "/logs/redis/aof/appendonly.aof"
# 磁盘同步策略,可选项
#   1.everysec每秒/次持久化(默认)
#   2.always每次操作都持久化
#   3.no:由操作系统决定何时同步,最不安全但性能最好
appendfsync everysec
# AOF文件大小增长率达到该值时触发AOF重写,默认100,表示AOF文件大小增长到原大小的2倍时触发重写
auto-aof-rewrite-percentage 100
# AOF文件大小达到该值时触发AOF重写,默认64MB
auto-aof-rewrite-min-size 64mb
# Redis以AOF模式启动时,是否自动修复截断的AOF文件。默认为yes
aof-load-truncated yes

AOF重写简介

Redis中一种优化AOF文件大小和性能的机制,Redis在后台创建一个新的AOF文件,该文件仅包含当前数据库中所有键值对的最新状态所需的写命令,去除旧AOF文件中的冗余命令,达到压缩AOF文件大小的目的。

具体流程

Redis会fork出一个子进程来进行AOF重写操作。在fork期间,Redis会阻塞客户端命令的处理,但通常这个过程非常短暂;子进程会扫描Redis的数据库,并将每个键值对转换为相应的写入命令;子进程将转换后的写入命令写入到一个新的临时AOF文件中;在子进程进行AOF重写的过程中,主进程会继续接收和处理客户端的写操作。这些新的写操作会被追加到一个缓冲区(AOF重写缓冲区)中,并通过管道通知子进程;子进程完成AOF重写后,Redis将缓冲区中新的写操作追加到临时文件中,并向主进程发送信号;主进程在收到子进程的信号后,会用临时文件替换旧的AOF文件,并关闭旧的AOF文件

AOF触发方式

  • 被动触发:在redis.conf中配置即可。
  • 手动触发:在redis中使用命令触发,命令如下
    • bgrewriteaof:非阻塞持久化:执行命令Redis开始执行备份操作,在备份操作执行完毕之前,仍可处理其他请求。Redis服务器接收到命令后,检查当前是否正在执行savebgsave或另一个bgrewriteaof的子进程。如果有,则bgrewriteaof命令会直接返回,因为不允许操作同时执行。具体执行逻辑请看上述的具体流程

RDB+AOF混合模式配置

持久化文件的前半部分是RDB格式的全量数据,后半部分是AOF格式的增量数据

# 当重写AOF文件时,Redis在AOF文件中使用RDB前导以实现更快的重写和恢复
aof-use-rdb-preamble yes
# 开启AOF持久化  
appendonly yes  
# 设置AOF日志的同步策略  
appendfsync everysec  
# 开启混合持久化模式  
aof-use-rdb-preamble yes  
# 配置RDB持久化的save选项  
save 900 1  
save 300 10  
save 60 10000
# 备份文件名
dbfilename dump.rdb
# RDB文件存储路径
dir ./

混合模式持久化触发方式

  • 被动触发:在redis中配置即可。备份流程:当AOF重写被触发时(无论是手动触发还是自动触发),Redis会首先执行一个类似于RDB的持久化过程,即将当前内存中的数据库状态以RDB格式写入到AOF文件的开头;这个过程会生成一个RDB快照,包含了重写时刻数据库的数据。在RDB快照写入AOF文件之后,Redis会将自RDB快照创建以来发生的所有写命令以AOF格式追加到AOF文件的末尾,这样,AOF文件就包含了从RDB快照创建开始到当前时刻的所有写操作命令,当AOF重写完成后,新的AOF文件会替换旧的AOF文件;新的AOF文件既包含了RDB格式的快照,也包含了后续的AOF命令
  • 手动触发:在redis中使用命令触发,命令如下
    • bgrewriteaof
posted @   勤匠  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示