Redis持久化 RDB和AOF的比较和选择

Redis持久化

redis是一个内存数据库,数据保存在内存中,同时如果你需要数据存储在磁盘中可以使用其自带的两种数据存储方式。

RDB(RedisDataBase)

RDB是redis默认的持久化存储方式,RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb,文件位置默认保存在redis服务的启动目录。

相关的redis.conf

save
如果你不需要执行持久化全部注释即可

save m n 表示m秒内数据集存在n次修改时,自动触发bgsave
默认配置为:(不同版本可能不同)

  • After 3600 seconds (an hour) if at least 1 key changed
    表示3600s 以内1个key变化后执行保存
  • After 300 seconds (5 minutes) if at least 100 keys changed
    表示300 s以内一个100变化后执行保存
  • After 60 seconds if at least 10000 keys changed
    表示60s以内一个10000变化后执行保存
  • save 3600 1
  • save 300 100
  • save 60 10000

stop-writes-on-bgsave-error

当redis无法写入磁盘的话直接关闭Redis的写操作

默认配置为:stop-writes-on-bgsave-error yes

rdbcompression
对于存储到磁盘中的快照,可以设置是否进行压缩存储。redis采用LZF压缩,如果为了提高性能可以关闭该选项,但会导致数据库文件变大。

默认配置为: rdbcompression yes

rdbchecksum
在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

默认值为:rdbchecksum yes

dbfilename
进行RDB存储的文件名

默认配置为:dbfilename dump.rdb

dir
用来存储RDB文件的位置

默认配置为:dir ./

执行的流程

RDB持久化是通过单独创建一个子进程(fork),进行持久化会将数据先写入到一个临时文件,等持久化过程结束以后再替换原来的 dump.rdb 文件。

RDB的优缺点

RDB的优点

  1. 整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。
  2. 由于是进行的fork,主进程不会进行任何IO操作,确保了性能优秀。
  3. 相比与AOF RDB的启动更加快速

RDB的缺点

  1. 数据安全和完整性得不到保障,在备份时间时间间隔期间如果发生宕机操作 最后一次持久化后的数据会出现数据丢失问题。
  2. 因为是fork操作协助完成数据持久化,当数据集过大时可能会导致服务器短暂停止服务。

AOF(Append Only File)

AOF是一种以日志的方式进行持久化备份的方式,其会记录Redis所有的写操作,只允许追加文件不允许改写文件。

相关的redis.conf

appendonly
开启AOF

默认配置为:appendonly no

appendfilename
设置AOF保存的文件名

默认配置为:appendfilename “appendonly.aof”

重写配置

auto-aof-rewrite-percentage 100
增长百分比为100时开启重写
auto-aof-rewrite-min-size 64mb
当前aof文件大小大于这个值开启重写

AOF同步频率配置

appendfsync always
始终同步,性能较差,但是数据完整
appendfsync everysec
默认配置,每秒同步,如果宕机,本秒数据可能会丢失。
appendfsync no
不进行自动同步,同步时机交给操作系统。

执行的流程

AOF持久化咨询的流程,客户端的写命令会被append追加进缓冲区,缓冲区中的数据会根据AOF同步频率配置【always everysec no】同步到磁盘中,当AOF文件大小超过重写策略或者手动重写以后,AOF会进行rewrite重写压缩文件容量。

重写规则部分示例

#重写前
set key1 1
set key2 2
set key3 3
set key4 4
#重写后
set key1 1 key2 2 key3 3 key4 4

如果出现aof错误导致的redis链接失败,可以在备份 appendonly.aof 后,使用以下命令进行修复,修复后重启redis。

redis-check-aof--fix appendonly.aof 

AOF的优缺点

AOF的优点

  1. 备份机制稳健,数据安全,不容易丢失数据。
  2. 可读的日志文本,可以进行数据修复。

AOF的缺点

  1. 相比与RDB更占用磁盘空间,同时恢复速度比RDB慢。
  2. 同步频率过高对性能有一定消耗。
  3. 存在个别BUG导致恢复失败。

总结

官方推荐两个都启用,如果对数据安全没有要求可以只启用RDB,但是不建议单独使用AOF。如果只是用Redis作为纯内存缓存,则可以都不启用。
同时开启两种缓存的话,恢复数据时会优先采用AOF,因为AOF的数据更加完整。

你可能感兴趣的:(redis,redis,缓存,数据库)