Redis持久化之RDB(Redis DataBase) 和 AOF(Append Only File)
Redis提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。
1. RDB持久化:
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件。RDB文件是一个经过压缩的二进制文件,可以通过保存某个时间点的数据集来实现数据的备份和恢复。RDB持久化的优点是性能较高,可以最大化Redis的性能,因为Redis在持久化时唯一要做的是启动一个新的进程,并将数据保存到磁盘上,由于Redis处理数据是在内存中,所以直接写入到磁盘上速度很快。缺点是可能会丢失最后一次快照以后更改的数据,因为RDB是间隔一段时间进行持久化,如果持久化之后Redis发生故障,则会丢失最后一次持久化后的数据。
2. AOF持久化:
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,只许追加文件,不许改写文件。Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF相对可靠,AOF文件内容是字符串,非常容易阅读和解析。优点是可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。缺点是AOF文件比RDB文件大,且恢复速度慢。
需要注意的是,如果同时开启了RDB和AOF,当Redis重启时,会优先载入AOF文件进行数据恢复,因为通常情况下AOF数据完整性要比RDB高。在数据恢复时,Redis会先载入AOF文件恢复原始的数据,然后在用RDB的数据进行补充,这样重启后的数据会和最后一次的持久化数据相同。同时,Redis支持同时开启AOF和RDB,但是AOF和RDB互相有优先级,通过配置可以指定。如果AOF存在,那么就优先加载AOF,否则加载RDB。
在Redis中可以通过配置文件(通常是redis.conf
)来设置RDB和AOF持久化的相关参数。以下是关于RDB和AOF持久化的一些常见配置选项:
RDB持久化配置:
-
save:设置触发RDB持久化的条件,格式为
save <seconds> <changes>
,表示在指定的秒数内,如果有指定数量的键发生改变,则触发RDB持久化。例如:save 900 1 # 900秒内至少有1个key被改变则做一次快照 save 300 10 # 300秒内至少有10个key被改变则做一次快照 save 60 10000 # 60秒内至少有10000个key被改变则做一次快照
-
stop-writes-on-bgsave-error:默认为
yes
,当后台保存进程(bgsave)出错时,主进程是否停止写入。 -
rdbcompression:默认为
yes
,对于RDB持久化是否使用LZF压缩字符串对象。 -
rdbchecksum:默认为
yes
,在存储和加载RDB文件时是否进行校验。 -
dbfilename:RDB持久化文件的名称,默认为
dump.rdb
。 -
dir:RDB文件和AOF文件的存储目录,默认为Redis的启动目录。
AOF持久化配置:
-
appendonly:默认为
no
,是否开启AOF持久化。设置为yes
以启用AOF。 -
appendfilename:AOF文件的名称,默认为
appendonly.aof
。 -
appendfsync:控制AOF文件同步到磁盘的策略。可选值有
always
(每个写命令都立即同步)、everysec
(每秒同步一次)、no
(由操作系统决定何时同步)。默认是everysec
。conf复制代码 appendfsync everysec # 推荐使用,兼顾性能和数据安全性
-
no-appendfsync-on-rewrite:在AOF重写期间是否禁用fsync。默认为
no
,表示重写期间仍然进行同步操作。如果设置为yes
,则在AOF重写期间不进行同步,这可能会增加数据丢失的风险,但可以提高性能。 -
auto-aof-rewrite-percentage:触发AOF重写的增长百分比阈值。当AOF文件的大小比上一次AOF重写后的大小大指定的百分比时,触发AOF重写。默认值为100,表示AOF文件大小增长到上次重写后大小的两倍时触发重写。
-
auto-aof-rewrite-min-size:AOF重写的最小文件大小。只有当AOF文件的大小大于此值时,才会触发AOF重写。默认值为64MB。
-
aof-load-truncated:当AOF文件出现截断错误时,是否允许Redis加载AOF文件。默认为
yes
。 -
aof-use-rdb-preamble:默认为
yes
,表示在AOF文件的开头是否使用RDB格式来存储数据,以加快数据加载的速度。
确保在修改配置文件后重启Redis服务,以使更改生效。请注意,错误的配置可能会导致数据丢失或Redis服务不稳定,因此在修改配置之前,请务必备份原始配置文件,并仔细测试任何更改。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18060140