redis的RDB持久化配置以及数据恢复实验

发布 : 2017-06-10 分类 : 大数据 浏览 :

1.如何配置RDB持久化机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
redis.conf文件,也就是/etc/redis/6379.conf,去配置持久化

save 60 1000

每隔60s,如果有超过1000个key发生了变更
那么就生成一个新的dump.rdb文件,就是当前redis内存中完整的数据快照
这个操作也被称之为snapshotting,快照

也可以手动调用save或者bgsave命令,同步或异步执行rdb快照生成

save可以设置多个,就是多个snapshotting检查点

每到一个检查点,就会去check一下,是否有指定的key数量发生了变更

如果有,就生成一个新的dump.rdb文件

Markdown

2.RDB持久化机制的工作流程

1
2
3
4
5
6
(1).redis根据配置自己尝试去生成rdb快照文件
(2).fork一个子进程出来
(3).子进程尝试将数据dump到临时的rdb快照文件中
(4).完成rdb快照文件的生成之后,就替换之前的旧的快照文件

dump.rdb,每次生成一个新的快照,都会覆盖之前的老快照

3.基于RDB持久化机制的数据恢复实验

1
2
3
4
5
6
7
(1).在redis中保存几条数据,立即停掉redis进程,然后重启redis,看看刚才插入的数据还在不在

数据还在,为什么?

因为通过redis-cli SHUTDOWN这种方式去停掉redis,其实是一种安全退出的模式,redis在退出的时候会将内存中的数据立即生成一份完整的rdb快照

/var/redis/6379/dump.rdb

Markdown

1
2
3
(2).在redis中再保存几条新的数据,用kill -9粗暴杀死redis进程,模拟redis故障异常退出,导致内存数据丢失的场景

这次就发现,redis进程异常被杀掉,数据没有进dump文件,几条最新的数据就丢失了

Markdown

Markdown

1
(3).手动设置一个save检查点,save 5 1
1
(4).写入几条数据,等待5秒钟,会发现自动进行了一次dump rdb快照,在dump.rdb中发现了数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@matrix-cache01 ~]# cd /etc/init.d
[root@matrix-cache01 init.d]# ./redis_6379 start
[root@matrix-cache01 init.d]# ps -ef | grep redis
[root@matrix-cache01 ~]# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
[root@matrix-cache01 ~]# redis-cli SHUTDOWN

Markdown

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/06/10/Redis的RDB持久化配置以及数据恢复实验/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹