Redis提供了两种不同的方法来将数据存储到硬盘里面,一种叫内存快照,另一种叫只追加文件(AOF),这两种方法既可以同时使用课可以单独使用,也可以都不使用,取决于场景。
快照
快照是将某一时刻的所有数据都写入硬盘里面,用作服务器重启是还原数据用。在创建完快照文件之后,可以将快照文件复制到其他服务器上进行备份,或者复制到其他服务器上并启动redis实例建立一个具有相同数据的redis服务器副本。
在redis中启用快照的配置如下:
----------------快照设置start-------------------------------
save 60 1000 --在60s内有1000条写入就执行快照,该配置可以设置多次,满足其中一条即开始快照,一条以上就启用快照功能
stop-writes-on-bgsave-error no --如果快照写入失败(由于某些原因),Redis是否停止接收写操作(是或否)
rdbcompression yes // 是否使用LZF压缩STRING当写入rdb的时候
rdbchecksum yes // 是否对rdb进行CRC64校验
dir ./ -- 快照写到什么地方
dbfilename dump.rdb -- 内存快照的文件名
----------------快照设置end--------------------------------
快照的执行方式是bgsave命令,当满足save条件是就执行这个命令,也可以手动执行这个命令 windows平台不支持bgsave命令
bgsave会创建一个子进程来讲数据从内存写入到硬盘里,而父进程继续处理命令请求
当redis通过shutdown或者受到term信号需要关闭时会执行一次save命令,执行完后再关闭进程
AOF文件
AOF文件是将被执行的写命令复制到硬盘里面,追加到aof文件的末尾,所以,redis只要从头到尾执行一遍aof文件就可以恢复aof文件所记录的数据集
启用aof的配置如下
-----------------------AOF start---------------------------------
appendonly no --是否开启aof
appendfsync everysec -- aof文件的同步频率,取值为 always(每次写操作同步),everysec(每秒钟),no(由操作系统决定什么时候写入)
no-appendfsync-on-rewrite no -- 是否在aof文件重写期间调用fsync
appendfilename "appendonly.aof" // aof文件名
auto-aof-rewrite-percentage 100 -- 指定重写aof文件的条件,超过上次rewrite文件大小的百分比
auto-aof-rewrite-min-size 64mb --指定重写aof文件的条件,达到这个大小时才可以重写 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size条件必须同时满足
aof-load-truncated yes // redis在启动时可以加载被截断的AOF文件,而不需要先执行 redis-check-aof
dir./ -- 文件所在的目录
-----------------------AOF end----------------------------------
重写aof文件:随着时间的迁移,aof文件会越来越大,但它其实不需要这么大,所以就要对aof文件进行一次重写,就是将内存里面的数据重新生成一份命令列表,写入aof文件中
重写aof文件的命令是bgrewriteaof ,他也是创建一个子进程进行 aof文件的重写操作。 bgrewriteaof 命令也可以自动执行通过哦诶之auto-apf-rewrite的配置