# 011. redis 的 RDB 持久化配置以及数据恢复实验
# 如何配置 RDB 持久化机制
/etc/redis/6379.conf
save 900 1
save 300 10
save 60 10000
1
2
3
2
3
以上内容是原始默认的配置,该功能叫做 SNAPSHOTTING(快照)
save <seconds> <changes>
:当 n 秒后有 n 个 key 发生改变,就做一次快照备份
可以设置多个检查点,默认设置了 3 个检查点
# RDB 持久化机制的工作流程
- redis 根据配置自己尝试去生成 rdb 快照文件
- fork 一个子进程出来
- 子进程尝试将数据 dump 到临时的 rdb 快照文件中
- 完成 rdb 快照文件的生成之后,就替换之前的旧的快照文件
每次生成一个新的快照,都会覆盖之前的老快照,所以只会有一个 dump.rdb
# 基于 RDB 持久化机制的数据恢复实验
思路:
- 保存几条数据
- 关闭 redis
- 重启 redis
- 检查数据是否还在
下面使用命令来实验
redis-cli
set k1 11
set k2 22
set k3 33
exit
redis-cli shutdown
# 启动 redis
cd /etc/init.d/
./redis_6379 start
# 进入 cli 查看数据是否还存在
redis-cli
get k1
get k2
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
实验证明数据还是存在的。
这里有一个争议点,因为是 redis 自带的停止工具,是一种安全的退出模式,会将内存中的数据立即生成一份 rdb 快照文件,该文件存储在 /var/redis/6379/dump.rdb 中
下面再来测试 2 种非安全的退出模式:
第一种
写入几条数据,然后直接 kill 掉 redis 进程,启动后会发现数据丢失了
第二种
手动配置一个 save 5 1
写入几条数据,等待 5 秒钟,会发现自动进行了一次 dump rdb 快照
可通过查看 dump.rdb 文件更新时间确定
kill -9 redis 进程
启动 redis 查看数据
因为有 save 生效,所以数据都在;
TIP
在非正常退出 redis 的时候,再次启动会报错
[root@eshop-cache01 init.d]# ./redis_6379 start /var/run/redis_6379.pid exists, process is already running or crashed
由此可以看出来,当 redis 启动的时候回生成一个 pid 文件,如果该文件存在则不能再次启动
这里只能先删除该 pid 文件后,才能启动 redis 了