Redis持久化

Redis持久化

Redis持久化

Redis的持久化是为了确保内存中的数据能够安全地保存到硬盘上,从而在服务器重启或意外断电等情况下,可以从磁盘恢复数据。
Redis提供了两种主要的持久化方法:RDB(Redis Database)和AOF(Append Only File),以及一种混合持久化方式(适用于Redis 4.0及更高版本)。

RDB持久化(Redis Database 默认)

特点与流程:

  1. 特点

    • 定时快照:RDB采用定时或满足特定条件时触发的方式,将某一时刻的数据以二进制的形式保存到磁盘上,生成.rdb文件。
    • 数据紧凑:RDB文件是经过压缩后的二进制格式,占用空间相对较小,便于传输和备份。
    • 快速恢复:由于是整体数据集的序列化,因此在Redis启动时加载RDB文件恢复数据更快。
  2. 流程

    • Redis可以通过配置选项设置自动触发RDB保存的时机,如在一定时间内数据发生变化次数达到某个阈值或者每隔一段时间执行一次。
    • 执行RDB持久化时,Redis会 fork 一个子进程,由子进程负责将内存数据写入到 .rdb 文件中,避免了对主线程的影响。
    • 当Redis重启时,它会查找最新的 .rdb 文件,并从中加载数据回内存。
  3. 配置策略

  • 在redis.conf配置文件中默认有此下save 配置指令:
    save 900 1
    save 300 10
    save 60 10000
    
    这些行定义了触发RDB快照的条件。当满足任何一个条件时,Redis就会执行一次快照持久化操作,即将当前内存中的数据保存到磁盘上的RDB文件中。
    这里的条件是时间间隔(以秒为单位)和键修改次数的组合:
    • save 900 1 表示如果在过去的900秒(即15分钟)内至少有一个键发生了变化,则创建一个新的RDB文件。
    • save 300 10 表示如果在过去的300秒(即5分钟)内至少有10个键发生了变化,则创建一个新的RDB文件。
    • save 60 10000 表示如果在过去的60秒(即1分钟)内有10000个键发生了变化(这个数值通常用于几乎实时保存,因为对于大多数场景来说,短时间内大量键发生改变的情况较少见),则创建一个新的RDB文件。
  1. **快照路径,在redis.conf中,另外两个相关配置项 **:
  • dir 配置项指定了RDB快照文件存放的目录路径:

    dir ./ 
    

    这里表示RDB文件将被保存在Redis服务器的工作目录下。

  • dbfilename 配置项指定了RDB文件的具体名称:

    dbfilename dump.rdb
    

    这里表示RDB快照文件的名字将会是dump.rdb

所以,当Redis按照上述配置执行RDB持久化时,生成的快照文件将会位于工作目录下的dump.rdb文件中。如果需要调整快照存储位置或文件名,可以根据业务需求修改这两个配置项的值。

AOF持久化(Append Only File)

特点与流程:

  1. 特点

    • 命令追加:AOF持久化是通过将执行过的写命令追加到一个日志文件中,这样当Redis重启时,只需重新执行一遍日志文件中的命令即可恢复数据状态。
    • 实时性好:相比RDB,AOF的持久化频率更高,每次写操作完成后都会尽量将命令记录到磁盘,理论上数据丢失的风险更低。
    • 日志重写:随着AOF文件的增长,Redis会周期性地执行AOF重写操作,将一系列指令合并成更简洁高效的命令序列,以减少文件大小。
  2. 流程

    • Redis接收到写命令后,除了执行命令外,还会将该命令写入AOF缓冲区。
    • 缓冲区的内容定期通过write()系统调用同步到AOF文件中。
    • 可以配置不同的同步策略,比如“always”(每次写操作都同步到磁盘)、“everysec”(每秒同步一次)或“no”(由操作系统决定何时同步)。
  3. 配置策略

    • 编辑Redis的配置文件redis.conf
      找到配置选项 appendonly,将其默认值 no 改为 yes,这将开启AOF持久化功能。

      appendonly no  # 修改为
      appendonly yes
      
    • 可能还需要配置AOF文件的名称和保存路径:

      appendfilename "appendonly.aof"
      dir /path/to/your/directory  # 指定AOF文件和其他Redis文件的保存路径
      
    • 关闭正在运行的Redis服务:
      使用Redis客户端或者直接在服务器终端执行关闭命令:

      ./redis-cli shutdown
      
    • 重新启动Redis服务并应用新的配置:
      使用配置文件启动Redis服务:

      ./redis-server redis.conf
      

这样,Redis在重启后将根据AOF配置来持久化所有的写操作,每次接收到写命令时都会将命令追加到AOF文件中。
在Redis服务下次启动时,它会从AOF文件中重放所有命令来重建内存中的数据状态。

混合持久化(Redis 4.0+)

在Redis 4.0及以上版本中,重启Redis时可以选择同时使用RDB和AOF持久化数据,这样Redis首先加载RDB文件快速恢复大部分数据,然后再根据AOF文件中最近的增量命令继续恢复未包含在RDB文件中的数据变更,实现了高效恢复和低数据丢失风险的结合。

在实际应用中,选择何种持久化方式通常取决于应用场景对数据丢失的容忍度、恢复速度的需求以及资源消耗的考量。

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

posted @   汉源魂  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示