redis为了内存数据的安全考虑,会把内存中的数据以文件的形式保存到硬盘中。在服务器重启之后,会自动把硬盘的数据恢复到内存的里面 这种叫做持久化效果
redis支持两种持久化方式:
- snapshotting(快照)默认方式
- append-only file(缩写成aof)的方式
第一种方式:snapshotting(快照)默认方式
该持久化默认开启,一次性把redis中的全部数据保存到一份存储在硬盘中
(保存的文件名 dump.rdb)
如果数据非常多(10-20G)就不适合频繁进行持久化操作
a.如何开启 默认开启 有自己的触发条件
- save 900 1 表示900秒内如果超过1个key被修改 则发起快照保存
- save 300 10 表示300秒内如果有超过10 则发起
- save 60 10000 表示如果60秒内有超过10000 就发起
在配置文件中能够找到对应的配置
打开redis.conf文件
vim redis.conf
输入 /save 找到下方所示的内容跟
如果不想触发这三个条件 则在每一句的前面增加一个#即可!
b.设置保存文件的位置 和文件名
还是在redis.conf中进行修改
输入/dump.rdb 就能找到
c.手动发起快照 :
两种方式完成
方式一:
在登陆的状态下 直接执行 bgsave
方式二:
在没有登陆的状态下 ./redis-cli bgsave 手动发起一次快照保存操作
这种持久化方式的缺点:由于快照是在一定间隔做一次 所以redis意外停止服务的话 会丢失最后一次快照后的所有修改
第二种方式:append-only file(缩写成aof)的方式
本质:把用户执行的每个‘写’指令(添加,修改,删除)都备份到文件中
还原数据的时候就是执行具体写命令即可
a.如何开启
appendonly yes //启用aof持久化方式
appendfilename appendonly.aof //保存文件的名字
同样也是在redis.conf中进行编辑配置
vim redis.conf
然后输入 /appendonly 出现类似下方的地方 就能进行开启了
b.触发条件
appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒钟强制写入磁盘一次 在性能和持久化方面做了很好的折中 推荐使用
appendfsync no //完全依赖OS 性能最好 持久化没保障
同样也可以在redis.conf中找到对应的位置
c.aof文件重写
重写的原因是这样的 假设 每个命令重写一次aof 如果某个key操作100次 产生100行记录
aof文件会很大 例如当执行多次incr命令操作 aof文件会保存多次incr的命令 这样就会增大aof文件容量
所以我们需要对aof文件进行重写 把里面重复的命令压缩成y一条命令
就比如执行10次incr number 压缩成 set number 11
同样还是在redis的安装目录下的位置 执行命令即可
./bin/redis-cli -a redis密码 bgrewriteaof
需要注意的是 以上两种方式都开启的状况下 默认以aof方式为主