Redis

Redis第1️⃣6️⃣课 RDB持久化

2019-05-01  本文已影响1人  小超_8b2f

一、 什么是持久化

Redis所有的数据保存在内存中,对数据的更新将异步地保存在磁盘上


持久化方式

二、RDB

1)什么是RDB

RDB is what

2)RDB触发机制-主要的三种方式

将数据同步进行一个完整的拷贝,拷贝到rdb文件中。如果数据量大的话将阻塞
save触发生成rdb文件,若已经有rdb文件了,则新rdb替换老的rdb文件

127.0.0.1:6379> save
OK
127.0.0.1:6379>
同步步生成Redis内存数据快照文件:rdb文件
异步生成Redis内存数据快照文件:rdb文件 save命令与bgsave命令对比 自动生成策略
----------------------------------默认配置---------------------------------------
#   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  # 在文件末尾进行循环冗余校验
----------------------------------默认配置---------------------------------------

\color{red}{自定义配置:}

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)触发机制-不容忽略的方式

  1. 全量复制 (主从复制的时候,主节点会自动生成rdb)
  2. debug reload : debug级别的重启Redis服务器,不需要清空内存的redis-server重启
  3. 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图中命令


bgsave子进程 bgsave过程中产生的临时文件 bgsave执行结束,临时文件被删除,rdb文件被替换
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)总结

  1. RDB是Redis内存到硬盘的快照,用于持久化
  2. save通常会阻塞Redis
  3. bgsave不会阻塞Redis,但是会fork新的进程 (fork()是unix生成子线程的接口)
  4. save自动配置满足任一条件就会被执行
  5. 一些触发机制不容忽视
上一篇 下一篇

猜你喜欢

热点阅读