redis的持久化方案有2种,分别是RDB和AOF,下面分别介绍一下这两种方案的备份和恢复方式。
一、RDB RDB方式有两种保存方式,分别为save和bgsave,两者的区别就在于save是阻塞型,当save指令发起时redis会优先处理save命令,而其他读写请求会被暂停直到save命令操作完成。bgsave则是非阻塞型,它会新打开一个进程来处理bgsave操作,而其他正常的读写请求不会受到影响。
1.1、save方法:
修改redis配置文件,找到如下配置:这是RDB方法的全局配置,无论是save还是bgsave都使用这个配置。
dbfilename dump.rdb //保存的文件名
dir /data/redis/ //保存文件的路径
保存后重启服务,在/data/redis目录下会自动创建dump.rdb文件。保存规则会按照上面的设置来保存。或者手动执行保存:
[root@nginx redis]# redis-cli
127.0.0.1:6379> save
OK
127.0.0.1:6379>
1.2、bgsave方法:
和上文配置相同,只是需要添加如下配置:此方式为永久生效,但需要重启服务。
save 900 1 //900秒内如果有超过1个key被修改则发起保存快照
save 300 10 //300秒内如果有超过10个key被修改则发起保存快照
save 60 10000 //60秒内如果有超过1000个key被修改则发起保存快照
还可以通过命令行来设置开启,此方式为临时生效,无需重启即可生效。
[root@nginx ~]# redis-cli
127.0.0.1:6379> config set save "900 1"
OK
127.0.0.1:6379>
系统会按照设置的规则进行保存。
永久关闭方法将配置文件种的save注释掉就可以了,临时关闭方法:
[root@nginx ~]# redis-cli
127.0.0.1:6379> config set save ""
OK
127.0.0.1:6379>
二、AOF 永久生效方式还是修改配置文件实现:
appendonly yes //开启AOF日志功能
appendfilename "appendonly.aof" //AOF文件名称
#appendfsync always //每一个写入一次,数据保存完整,但影响性能
appendfsync everysec //每一秒钟保存一次,会丢失1秒数据
# appendfsync no //由操作系统决定保存方式,取决于系统的缓冲区大小
auto-aof-rewrite-min-size 64mb //当AOF文件至少超过64MB时重写
AOF文件保存的路径和RDB文件在相同目录。
临时生效方式:
[root@nginx ~]# redis-cli
127.0.0.1:6379> config set appendonly yes
OK
127.0.0.1:6379>
永久关闭方式也是修改配置文件重启服务,临时关闭只需要执行如上相反的操作:
[root@nginx ~]# redis-cli
127.0.0.1:6379> config set appendonly no
OK
127.0.0.1:6379>
三、数据恢复 redis默认启动会从备份目录寻找备份文件来恢复数据,如果没有备份文件则数据为空。
如果RDB文件和AOF文件同时存在就要看配置文件中是否将AOF功能开启,如果开启了AOF日志功能,则会从AOF文件恢复,如果是关闭的就会从RDB文件恢复,取决于如下配置:
appendonly yes
yes:开启AOF,从AOF文件恢复数据
no:关闭AOF,从RDB文件恢复数据