Redis 提供了不用类型的持久化选项:
- RDB(Redis Database): RDB是按照指定的时间间隔执行数据的快照。如果Redis意外退出或机器意外关机,那么在此启动Redis时数据会自动恢复,但是可能会丢失一个时间时间段的数据。
- AOF (Append Only File): AOF持久化会记录服务器接收到的每个写操作,这些操作会被保存到一个临时的文件中,当Redis重新启动时,会被读入并再次执行。使用与Redis协议本身相同的记录格式,并且采用仅追加的方式。当日志太大时,Redis可以在后台重写日志。
在选择持久化方案的时候,最重要的事情就是在RDB和AOF之间权衡利弊。
Redis – RDB
优势
- 每隔一段时间会全量备份。
- 灾备简单,RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时存档一次RDB文件,并在30天之内每天保存一次RDB快照。这样,在发生灾难时,您可以轻松地还原不同版本的数据集。
- 会启动子进程进行持久化,不会影响主进程,保证数据的完整性。
- 与AOF相比,RDB允许使用大型数据集更快地重新启动。
缺点
- 不适合最大程度地减少数据丢失的可能性(如果Redis停止工作,例如在断电之后),则RDB可能会丢失部分数据。(不能实时备份)
- RDB需要经常使用
fork()
才能使用子进程将其持久化在磁盘上。如果数据集很大,fork()
可能很耗时,并且如果数据集很大且CPU性能不佳,则可能导致Redis停止为客户端服务几毫秒甚至一秒钟。
配置开启
在redis.conf
中进行配置
dir /usr/local/redis/ # 设置工作目录,dump.rdb会存在这个目录下
dbfilename dump.rdb # 设置保存的文件名
rdbcompression yes # yes开启压缩,会增加cpu的占用,但是文件会小
# 设置保存机制
# save <seconds> <changes>
save 60 1 # 如果1个缓存更新,则60秒后进行备份
save 300 10 # 如果10个缓存更新,则300秒后进行备份
RDB的方式适合大量数据的恢复,但是数据的完整性和一致性可能会不足。
Redis – AOF
优势
- 适合实时备份
- 以日志的形式记录,且是仅追加的日志。因此,如果断电,则不会出现寻道,也不会出现损坏问题。即使由于某种原因(磁盘已满或其他原因)命令写了一半结束了,
redis-check-aof
工具也可以轻松修复它。 - 让数据量太大时,Redis可以在后台自动重写AOF。重写是完全安全的,因为Redis继续追加到旧文件时,会生成一个全新的文件,其中包含创建当前数据集所需的最少操作集,一旦准备好第二个文件,Redis会切换这两个文件并开始追加到新的那一个。
- AOF以易于理解和解析的格式包含所有操作的日志。您甚至可以轻松导出AOF文件。例如,即使您不小心使用
flushall
命令刷新了所有内容,只要在此期间未执行日志重写,您仍然可以通过停止服务器,删除最新命令并重新启动Redis来再次保存数据集。
例子:
redis 127.0.0.1:6379> set key1 Hello
OK
redis 127.0.0.1:6379> append key1 " World!"
(integer) 12
redis 127.0.0.1:6379> del key1
(integer) 1
redis 127.0.0.1:6379> del non_existing_key
(integer) 0
Bash复制
Result :
$ cat appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
set
$4
key1
$5
Hello
*3
$6
append
$4
key1
$7
World!
*2
$3
del
$4
key1
缺点
- 对于同一数据集,AOF文件通常大于等效的RDB文件。
- 如果开启了AOF每次操作都进行备份而不是设置按秒更新会导致redis性能下降。
配置开启
在 redis.conf
中进行配置
appendonly yes # 开启AOF
appendfilename "appendonly.aof" # 设置AOF文件名
appendfsync everysec # 配置备份方式
# appendfsync everysec 每秒钟进行备份,可能会丢失最后一秒的数据
# appendfsync always 每次有新命令都进行备份,性能较差,能保证数据安全
# appendfsync no 可以理解为不开启
no-appendfsync-on-rewrite no # 重写的时候是否进行备份,否可以保证数据安全
# 当当前AOF文件大小为上次AOF的100%并且文件大小达到64m,就触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
如何选择
- 如果可以接受一段时间的数据丢失,可以选择RDB
- 如果需要实时备份,可以选择AOF
- 可以同时开启RDB和AOF,实现冷、热备份双保险。
正文完