浅谈redis持久化机制

redis为了内存数据的安全考虑,会把内存中的数据以文件的形式保存到硬盘中。在服务器重启之后,会自动把硬盘的数据恢复到内存的里面 这种叫做持久化效果

redis支持两种持久化方式:

  1. snapshotting(快照)默认方式
  2. 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方式为主

猜你喜欢

转载自blog.csdn.net/zhangzeshan/article/details/89402355