Loading

Redis 的持久化机制

Redis 的持久化策略有两种:

RDB:快照形式是直接把内存中的数据保存到一个 dump 的文件中,定时保存,保存策略。

RDB是Redis的一个快照文件,比如说现在的时间是下午14:00,Redis做了一次快照的备份,把这个数据备份到了RDB,那么这个RDB文件的数据就只停留在下午两点,下午两点以后的数据RDB是没有的,因为它相当于一个冷备,备份的时间只停留在下午两点钟这个时刻的快照。

AOF:把所有的对 Redis 的服务器进行修改(写、删除操作)的命令都存到一个文件里命令的集合,查询操作不会记录。

当我们使用AOF恢复数据到Redis的时候,它会重新执行一遍我们之前操作的所有操作语句。AOF文件会越变越大,AOF里还有个技术叫Rewrite压缩重写,当我们的AOF文件不断变大的时候,比如我们设置的阀值是64M,当AOF文件第一次到达64M的时候,Redis会自动触发一次Rewrite操作,将AOF文件进行一次瘦身。AOF中Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步

前者是指超过上一次aof重写aof文件大小的百分之多少,会再次优化,如果没有重写过,则以启动时为主。后者是限制了允许重写的最小aof文件大小。bgrewriteaof命令是手动重写命令,会fork子进程,在临时文件中重建数据库状态,对原aof无任何影响,当重建旧的状态后,也会把fork发生后的一段时间内的数据一并追加到临时文件,最后替换原有aof文件,新的命令继续向新的aof文件中追加

Redis 默认是快照 RDB 的持久化方式。

当 Redis 重启的时候,它会优先使用 AOF 文件来还原数据集,因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存。

默认 Redis 是会以快照"RDB"的形式将数据持久化到磁盘的一个二进制文件 dump.rdb。

AOF 可以做到全程持久化,只需要在配置中开启 appendonly yes。

这里是配置AOF持久化的策略。redis默认使用everysec,就是说每秒持久化一次,而always则是每次操作都会立即写入aof文件中。而no则是不主动进行同步操作,是默认30s一次。当然always一定是效率最低的,个人认为everysec就够用了,数据安全性能又高 

这样 Redis 每执行一个修改数据的命令,都会把它添加到 AOF 文件中,当 Redis 重启时,将会读取 AOF 文件进行重放,恢复到 Redis 关闭前的最后时刻

posted @ 2020-08-12 10:39  Allfuture  阅读(130)  评论(0编辑  收藏  举报