Redis

redis数据持久化方式有两种:

1. RDB 方式 (Redis Database)

    将某一时刻内存中的数据保存到硬盘中,保存的文件扩展名一般为 rdb。

2. AOF 方式 (append-only file)

    追加文件,将执行的写命令(增删改)写到硬盘中。(类似所有更改数据执行日志,但记录的是命令)

两种方法可以单独使用或同时使用,在重写加载数据时 AOF优先级更高,只会使用 AOF 方式恢复数据。


一. RDB 方式持久化

1. 创建快照的方法

(1) 使用 BGSAVE 命令

        Redis 会调用 fork 来创建一个子进程将数据写入硬盘,父进程可以继续处理命令请求。

(2) 使用 SAVE 命令

        服务器接到 SAVE 命令,在没有创建快照完成前,不能再处理其他任何命令。

(3) 配置 redis.conf 中 save 项

        例子 :save 60 5 #距离上次生成快照超过60秒,并且在此期间至少有五次写操作,则reids自动执行BGSAVE命令创建快照。

        如果配置多个 save 项,则在满足任何一项时,redis都会执行BGSAVE命令。

(4) 通过 SHUTDOWN 命令关闭服务器(kill不行)或接到TERM信号

        这种情况下,会自动执行SAVE命令,并不在给任何客户端提供服务。生成快照后关闭服务。

(5) 集群中数据复制时(SYNC命令)

        如果主服务器没有再执行 BGSAVE 命令,或不是在刚刚执行完 BGSAVE 命令,则主服务器就会执行 BGSAVE。

可以使用 lastsave 命令查看最后保存快照时间。

2. 相关配置项(redis.conf):

save 900 1 # 距离上次生成快照超过900秒,并且在此期间至少有一次写操作,则 reids 自动执行 BGSAVE

save 300 10 # 距离上次生成快照超过300秒,并且在此期间有10次写操作,则 reids 自动执行 BGSAVE

save 60 10000 # 距离上次生成快照超过60秒,并且在此期间有10000次写操作,则 reids 自动执行 BGSAVE

save "" # 表示禁用 RDB 快照持久化功能,但是仍然可以使用SAVE 或 BGSAVE 生成 RDB 文件

stop-writes-on-bgsave-error yes # 当BGSAVE命令执行发生错误时,停止所有写操作(增删改-都不能正确执行)

rdbcompression yes # 压缩

dbfilename dump.rdb # 快照保存文件名称, 服务器启动时自动加载快照中数据

dir /redis-data # 快照保存文件路径,绝对路径


二、AOF持久化

1. 相关配置项(redis.conf)

append-only no #AOF启用开关 (no|yes),禁用情况下任然可以执行BGREWRITEAOF 生成 AOF 文件

appendfsync everysec #同步策略 (always|everysec|no)
* always #在执行每个写命令的时候,同步保存到硬盘。(严重影响性能)
* everysec #每秒钟同步到硬盘一次
* no #将命令写到 AOF 缓冲区后,由操作系统决定同步时间

appendfilename "appendonly.aof" #持久化文件名

dir /redis-data #文件保存路径,绝对路径 (同快照)

no-appendfsync-on-rewrite no # AOF 重写期间是否同步
参考:https://blog.csdn.net/jingkyks/article/details/46956905

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 当AOF文件大于64mb,并且文件体积比上一次重写之后大了100%(一倍)时,自动执行BGREWRITEAOF命令

AOF体积增大问题?
可以使用 BGREWRITEAOF 命令,提出文件中冗余的命令记录。(工作原理和BGSAVE相似:创建子进程)

Redis 7 版本 AOF 变动

1、新增了 AOF 保存目录配置项
appenddirname "appenddirname"
实际的 AOF 保存目录是 dir/appenddirname/ 。

2、在 7 版本前只有一个 appendonly.aof 文件,7 版本中拆分为三个文件(Multi Part AOF)
appendonly.aof.1.base.rdb # 基础的 AOF 文件,一般由子进程重写产生,并且最多只会有一个
appendonly.aof.1.incr.aof # 增量 AOF 文件,一般会在 AOF 重写时被创建,此类型文件会存在多个
appendonly.aof.manifest # AOF 文件清单,用来跟踪和管理 AOF 相关文件


三、开启 RDB 和 AOF 方式混合使用

编辑 redis.conf 文件

aof-use-rdb-preamble yes # 开启,no 表示禁用



学习参考资料:《Redis 实战》 【美】josiah L.Carson 著 - 黄健宏 译


转载请指明出处!http://www.miselehe.com/article/view/15