默认状况下 Redis 的数据都是保存在内存中,为避免 Redis 进程意外退出而致使数据丢失的问题,Redis 提供了 RDB 和 AOF 两种方式来实现数据的持久化存储。git
RDB 机制是以指定的时间间隔将 Redis 中的数据生成快照并保存到硬盘中,它更适合于定时备份数据的应用场景。能够经过手动或者自动的方式来触发 RDB 机制:github
能够经过如下两种方式来手动触发 RDB 机制:redis
除了手动使用命令触发外,在某些场景下也会自动触发 Redis 的 RDB 机制:算法
redis.conf
中配置了 save m n
,表示若是在 m 秒内存在了 n 次修改操做时,则自动触发bgsave
;bgsave
,并将生成的 RDB 文件发送给从节点;debug reload
命令从新加载 Redis 时,会触发save
操做;shutdown
命令时候,若是没有启用 AOF 持久化则默认采用bgsave
进行持久化。1. 文件目录shell
RDB 文件默认保存在 Redis 的工做目录下,默认文件名为 dump.rdb
,能够经过静态或动态方式修改:数据库
静态配置:经过修改 redis.conf
中的工做目录dir
和数据库存储文件名dbfilename
两个配置;安全
动态修改:经过在命令行中执行如下命令:网络
config set dir{newDir}
config set dbfilename{newFileName}
复制代码
2. 压缩算法app
Redis 默认采用 LZF 算法对生成的 RDB 文件作压缩处理, 这样能够减小占用空间和网络传输的数据量,可是压缩过程会耗费 CPU 的计算资源, 你能够按照实际状况,选择是否启用。能够经过修改 redis.conf
中的 rdbcompression
配置或使用如下命令来进行动态修改:运维
config set rdbcompression{yes|no}
复制代码
AOF 是 Redis 提供的另一种持久化的方式,它以独立日志的方式记录每次写入操做,重启时再从新执行这些操做,从而达到恢复数据的命令。
开启 AOF 机制后,全部的写入命令都会追加到 aof_buf 缓冲区中,并按照指定的策略定时将缓冲区中的数据同步到磁盘上。 AOF 除了记录每条命令外,还会在适当的时候 fork 出一个子进程对 AOF 文件进行重写,在重写过程当中,Redis 会将能够合并的语句进行合并,将无效的语句进行删除,从而减少 AOF 文件的体积,以便减小文件的占用空间和方便在数据恢复时可以更快的进行加载。
Redis 提供了三种同步策略,用于控制 AOF 缓冲区同步数据到磁盘上的行为,由参数appendfsync
控制:
可选配置 | 说明 |
---|---|
always | 命令写入 aof_buf 后就调系统 fsync 操做同步到 AOF 文件 |
everysec | 命令写入 aof_buf 后就调用系统的 write 操做,但 fsync 同步文件的操做则由专门线程每秒调用一次 |
no | 命令写入 aof_buf 后就调用系统的 write 操做,不对 AOF 文件作 fsync 同步,同步操做由操做系统负责,一般同步周期最长为30秒 |
write 和 fsync 操做说明:
Redis 默认的同步机制为everysec
,此时可以兼顾性能和保证数据安全,在发生意外宕机的时,最多会丢失一秒的数据。
想要使用 AOF 功能,须要配置 appendonly
的值为yes
,默认值为no
。默认 AOF 的文件名为 appendonly.aof
, 能够经过修改appendfilename
的值进行修改,和 RDB 文件的保存位置同样,默认保存在 Redis 的工做目录下。
按照 Redis 官方的推荐,为保证的数据安全性,能够同时使用这两种持久化机制,在 Redis 官方的长期计划里面,将来可能会将 AOF 和 RDB 统一为单一持久化模型。须要注意的是,在这种状况下,当 Redis 从新启动时,Redis 将使用 AOF 文件重建数据集,由于它能够保证数据的最少丢失。
更多文章,欢迎访问 [全栈工程师手册] ,GitHub 地址:github.com/heibaiying/…