Redis本来作为缓存使用,但是现在数据越来越重要,或者是redis在系统建设中起到了至关重要的环节,特别是在机器学习中训练用的语料及相似度向量和索引,这样就不希望Redis重启之后,或者是宕机之后,数据丢失,所以Redis的持久化机制是我们不得不了解的一个内容。
Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法叫快照,这样会在磁盘上产生rdb文件。它可以将存在于某一时刻的所有数据都写入硬盘里面;另外一种方法叫做只追加文件,它会在磁盘上产生aof文件,这种持久化方式是在执行命令时,将被执行的写命令复制到硬盘里面。这两种持久化方式既可以同时使用,又可以单独使用。
我们可以在配置文件中找到两种持久化方式的配置,配置文件就是redis.conf:
RDB的配置如下:
参数解释:
save 900 1 : 900秒内有1次写入就持久化
save 300 10: 300秒内有10次写入就持久化
save 60 10000:60秒内有10000次写入就持久化
stop-writes-on-bgsave-error yes : 当bgsave快照操作出错时,为yes时则停止写数据到磁盘
rdbcompression yes :是否压缩
rdbchecksum yes : 是否对rdb数据进行校验
dbfilename dump.rdb : 生成rdb文件名
dir ./ : 持久化文件所在目录,aof文件也会在这个目录产生
AOF配置如下:
参数解释:
appendonly no : 是否开启aof
appendfilename "appendonly.aof" : aof文件名
appendfsync everysec : 命令同步机制,always是总是写入aof文件,并完成磁盘同步,everysec是每一秒写入aof文件,并完成磁盘同步,no是写入aof文件,不等待磁盘同步
no-appendfsync-on-rewrite no : redis在进行aof重写时,是否阻塞主进程对客户端的请求
auto-aof-rewrite-percentage 100 :文件的大小超过基准百分之多少后触发bgrewriteaof
auto-aof-rewrite-min-size 64mb :触发bgrewriteaof的文件最小值
aof-load-truncated yes : redis在恢复时,是否忽略最后一条可能存在问题的指令
aof-use-rdb-preamble yes :是否开启混合持久化机制
我们开启两种持久化机制,并且向redis中写入几个键值:
这样会在配置的dir目录下,产生两个持久化文件:
并且rdb文件是二进制文件,人不可读,而aof文件是接收的指令,人可读的:
并且还可以看出,aof文件要比rbd文件体积大,而在数据完整性上,aof是要高于rdb文件的,因为rdb文件是在某一时点进行备份,假如在备份时点前一秒宕机了,那么在上一备份时点到宕机点这一时间段的数据就会丢失;而aof只会丢失一秒内的指令,综合两种持久化机制的优缺点,就会使用混合模式进行redis的持久化。宕机之后或者是redis重启之后的数据恢复,就是把rdb文件和aof文件放在配置文件中配置的dir目录下,redis就会根据rdb文件和aof文件进行数据恢复,对于rdb文件,redis直接加载进内存,速度非常快,而aof文件是指令,所以数据恢复起来较慢。