Redis持久化配置-RDB

7/21/2022 缓存框架

# 前述

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。

所以Redis 提供了两种持久化功能(RDB + AOF)

# RDB原理

redis

  • Redis会单独创建 ( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。

  • 整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

  • RDB的缺点是最后一次持久化后的数据可能丢失。我们默认的就是RDB,一般情况下不需要修改这个配置!

  • rdb保存的文件是 dump.rdb

# 测试

redis

[root@localhost kconfig]# vim redis.conf 
[root@localhost kconfig]# cd ..
[root@localhost redis]# cd bin
[root@localhost bin]# ls
dump.rdb  mkreleasehdr.sh  redis-benchmark  redis-check-aof  redis-cli  redis-sentinel  redis-server
[root@localhost bin]# rm -rf dump.rdb 
[root@localhost bin]# ls
mkreleasehdr.sh  redis-benchmark  redis-check-aof  redis-cli  redis-sentinel  redis-server
######################################################################################################
# 新窗口执行命令
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> save
OK
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> set k4 v4
OK
127.0.0.1:6379> set k5 v5
OK
127.0.0.1:6379> 
######################################################################################################
#新窗口 60s 内进行 5 次修改,触发持久化,生成dump.rdb文件
[root@localhost bin]# ls
dump.rdb  mkreleasehdr.sh  redis-benchmark  redis-check-aof  redis-cli  redis-sentinel  redis-server
######################################################################################################
# 将redis宕掉后重新启动,发现数据还在
not connected> SHUTDOWN
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@localhost bin]# ps -ef|grep redis
root      32293  31375  0 09:37 pts/1    00:00:00 grep --color=auto redis
[root@localhost bin]# redis-server /usr/local/redis/kconfig/redis.conf 
32437:C 03 Mar 2021 09:37:59.153 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
32437:C 03 Mar 2021 09:37:59.153 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=32437, just started
32437:C 03 Mar 2021 09:37:59.153 # Configuration loaded
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 触发机制

  • save的规则满足的情况下,会自动触发rdb规则

  • 执行flushall命令,也会触发我们的rdb规则!

  • 退出redis ,也会产生rdb文件!|

  • 备份就自动生成一个dump.rdb

# 如何恢复RDB文件

只需要将rdb文件放在我们redis启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据

查看需要存放的位置命令:
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/bin"     #如果在这个目录下存在 dump .rdb文件,启动就会自动恢复其中的数据
1
2
3
4

# 优缺点

# 优点

    • 适合大规模的数据恢复!
    • 对数据的完整性要求不高!

# 缺点

    • 需要一定的时间间隔!如果redis意外宕机,最后一次修改的数据就没有了
    • fork 进程的时候,会占用一定的内存空间