Redis开启AOF和RDB两种持久化(数据恢复小demo)

AOF和RDB的区别网上一大把,可以去背书一样背,理论太多,直接实操
首先有几点:

(1)Redis开启持久化非常简单,只要改个配置,踩点坑就行。
(2)配置文件中如果开启了持久化,那就不需要我们操心,它服务重启会自动恢复数据,跟我们的springboot, Java,node,半毛钱关系没有。
(3)MacBook,Linux,Windows虽然改配置文件是一样的,但是有些坑是不一样的。
(4)一定要注意自己的版本!一定要注意自己的 redis 的版本!一定要注意自己本地的redis的版本!!

(1)查看版本!

Redis开启AOF和RDB两种持久化(数据恢复小demo)
我的是4.0以下,所以就肯定是不支持 redis.conf中直接配置混合持久化模式的!根本没有那个模式的开关!

(2)首先关闭服务

Redis开启AOF和RDB两种持久化(数据恢复小demo)
Redis开启AOF和RDB两种持久化(数据恢复小demo)

(3)Mac系统中,如果使用homebrew安装软件的,默认应用安装目录统一在:/usr/local/Cellar,应用配置文件默认统一在:/usr/local/etc

所以,我们找到/usr/local/etc/redis.conf
RDB是默认开启的:
Redis开启AOF和RDB两种持久化(数据恢复小demo)

一般来说,我们不需要手动保存快照,但是有些很重要的节点的快照,防止丢失,还是可以BGSAVE或者SAVE手动保存的:Redis开启AOF和RDB两种持久化(数据恢复小demo)

Redis开启AOF和RDB两种持久化(数据恢复小demo)

快照文件备份的目录

Redis开启AOF和RDB两种持久化(数据恢复小demo)

(4)开启AOF

Redis开启AOF和RDB两种持久化(数据恢复小demo)
Redis开启AOF和RDB两种持久化(数据恢复小demo)

同步记录频率:

always: 每次操作都会立即写入aof文件中
everysec: 每秒持久化一次(默认配置)
no: 不主动进行同步操作,默认30s一次
Redis开启AOF和RDB两种持久化(数据恢复小demo)
当AOF文件增长到100%时进行rewrite
最小AOF文件大小64mb

(5)rewrite是什么鬼?

开启AOF的时候,我们每一次操作都会写入Appendonly.aof,所以操作频繁的时候,数据量大的时候,AOF文件也会非常肿大。
rewrite操作是当AOF文件非常肿大的时候,AOF文件大小到达64M或者文件大小增长了100%,创建子进程重写内存中的数据(抛弃一部分过期的/删除了的/针对同一个key多次操作的记录/无需做恢复数据记录),生成新的AOF文件,同时删除旧的AOF. 最后主进程会清理回收掉子进程,更简单的说,rewrite,就是针对AOF文件的一次清理整理。

(6)AOF和RDB开启后,它会自己按照默认路径生成相关后缀的文件,具体长下面这样:
RDB:

Redis开启AOF和RDB两种持久化(数据恢复小demo)
Redis开启AOF和RDB两种持久化(数据恢复小demo)

AOF(这个还是能稍微看懂,select就是在选择哪个库,默认的16个分库,默认使用第一个,然后set key value,数据恢复的时候执行一轮):

Redis开启AOF和RDB两种持久化(数据恢复小demo)
Redis开启AOF和RDB两种持久化(数据恢复小demo)

(7)AOF那么长,写到一般断掉了怎么办?

服务器可能在程序正在对 AOF 文件进行写入时停机, 如果停机造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会出于对数据一致性的保护而拒绝载入这个顺坏的 AOF 文件。Redis给我们提供了一个工具,专门用来修复AOF文件的:
Redis开启AOF和RDB两种持久化(数据恢复小demo)

具体用法: redis-check-aof -fix /XX/XX/XX.aof
(8)小坑:修改了配置文件重启后,Windows小伙可能马上就能看到停掉服务再重启都不会丢失数据了,但是Mac小伙和Linux小伙可能还是会发现丢数据,这个时候:

Linux:此时修改 vim /etc/sysctl.conf ,将overcommit_memory=1加入底部即可
MacBook:在Redis客户端执行一下redis-cli config set appendonly yes
Redis开启AOF和RDB两种持久化(数据恢复小demo)

(9)开始看效果环节!

先插入两条数据
Redis开启AOF和RDB两种持久化(数据恢复小demo)

redis-cli shutdown 啪地一下停掉服务!很快啊!

Redis开启AOF和RDB两种持久化(数据恢复小demo)

然后看一下还有没有数据:

Redis开启AOF和RDB两种持久化(数据恢复小demo)

成功,年轻人耗子尾汁