Redis持久化配置-RDB
前述
Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。
所以Redis 提供了两种持久化功能(RDB + AOF)
RDB原理
Redis会单独创建 ( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。
RDB的缺点是最后一次持久化后的数据可能丢失。我们默认的就是RDB,一般情况下不需要修改这个配置!
rdb保存的文件是 dump.rdb
测试
[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>
触发机制
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文件,启动就会自动恢复其中的数据
优缺点
优点
- 适合大规模的数据恢复!
- 对数据的完整性要求不高!
缺点
- 需要一定的时间间隔!如果redis意外宕机,最后一次修改的数据就没有了
- fork 进程的时候,会占用一定的内存空间