Redis第1️⃣6️⃣课 RDB持久化
2019-05-01 本文已影响1人
小超_8b2f
一、 什么是持久化
Redis所有的数据保存在内存中,对数据的更新将异步地保存在磁盘上

二、RDB
1)什么是RDB

2)RDB触发机制-主要的三种方式
-
1. save命令(同步)
将数据同步进行一个完整的拷贝,拷贝到rdb文件中。如果数据量大的话将阻塞
save触发生成rdb文件,若已经有rdb文件了,则新rdb替换老的rdb文件
127.0.0.1:6379> save
OK
127.0.0.1:6379>

-
2. bgsave命令(back ground save 异步)


-
3. 配置文件中设置自动生成策略

----------------------------------默认配置---------------------------------------
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
dbfilename dump.rdb
dir ./
rdbcompression yes #是否采用压缩格式
rdbchecksum yes # 在文件末尾进行循环冗余校验
----------------------------------默认配置---------------------------------------
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
dbfilename dump-${port}.rdb # 一台机器上启动多个Redis,根据端口号区别
dir /bigdiskpath
rdbcompression yes
rdbchecksum yes
3)触发机制-不容忽略的方式
- 全量复制 (主从复制的时候,主节点会自动生成rdb)
- debug reload : debug级别的重启Redis服务器,不需要清空内存的redis-server重启
- shutdown save 命令
4)实验
1)验证save命令是阻塞的
1. 按照自定义配置启动redis
2. 启动2个redis-cli,一个先执行save 命令,另一个后执行get key,发现只有save执行完成后get命令才起作用
2)验证bgsave命令是非阻塞的且会产生子进程
1. 一shell窗口执行:bgsave
1. 另外2个shell窗口分别执行如下2图中命令



3)验证配置文件自动save策略
# 一分钟内5次key变化便生成rdb,redis-6379.config中设置
save 60 5
####如下是shell中执行的命令
redis-cli shutdown
redis-server /usr/local/reds/etc/redis-6379.config
###一分钟内在redis-cli中执行如下命令:
set key1 value1
set key2 value2
set key3 value3
set key4 value4
set key5 value5
#结果发现生成了临时文件,生成了新的rdb文件
4)总结
- RDB是Redis内存到硬盘的快照,用于持久化
- save通常会阻塞Redis
- bgsave不会阻塞Redis,但是会fork新的进程 (fork()是unix生成子线程的接口)
- save自动配置满足任一条件就会被执行
- 一些触发机制不容忽视