Redis持久化之RDB

先说一下配置,以及rdb文件格式

配置方面

#redis日志文件
logfile "/usr/local/redis/log/redis.log"
#rdb自动策略之 900秒内有1个更改会触发生成rdb
save 900 1
#rdb自动策略之 300秒内有10个更改会触发生成rdb
save 300 10
#rdb自动策略之 60秒内有10000个更改会触发生成rdb
save 60 10000
#bgsave生成rdb的时候出现错误是否停止写入rdb
stop-writes-on-bgsave-error yes
#rdb文件是否压缩
rdbcompression yes
#是否对rdb文件进行校验
rdbchecksum yes
#生成的rdb文件名称
dbfilename dump.rdb
#rdb文件存放的路径
dir /usr/local/redis/data/

redis数据情况为空,添加一条数据,并且使用save 命令生成rdb

去看看rdb文件

打开看一看,生成的是一个redis快照的文件

下面来看看生成rdb 的几种方式

一.save命令生成RDB

         在客户端使用save 命令生成rdb文件,该方案是阻塞的,也就是说会阻塞其他redis命令的执行,必须把rdb 生成完才会执行其他命令

下面来演示一下是否阻塞

先插入200W条数据到redis,不然数据量太小保存得太快,不好演示

使用PHP 插入进去

$redis = new Redis();

$redis->connect('192.168.1.13',6379);

for ($i = 0; $i < 2000000; $i++) {
    $redis->set('test_key' . $i, $i);
}

然后使用命令行执行一下,你的PHP需要安装redis扩展,具体安装可以看看我其他的文章

执行完成之后,看看数据库情况

然后开两个窗口,一个先执行save,另一个执行get操作

 

可以看到确实阻塞了

可以查看日志,会出现一条 DB saved on disk 的日志

总结:该方式是同步阻塞优点是不会额外消耗内存,缺点很明显就是会阻塞其他命令,那么又没异步的方式呢?

二.bgsave命令生成RDB

除了save命令还有一条bgsave 命令,该方式是异步非阻塞(不完全),使用方式跟save 一样

执行bgsave 之后redis会开启一个子进程(redis-rdb-bgsave)来生成rdb文件

异步执行开始时会出现 Background saving started by pid 3727 这样的日志

执行完成之后可以在日志文件看到 Background saving terminated with success 这样的一条日志

总结:虽然说bgsave 是非阻塞的,但是在redis开启子进程的时候依然是阻塞的,在特殊情况下还是会阻塞,并且会消耗额外的内存。

三.根据策略自动生成RDB

也就是配置的

#rdb自动策略之 900秒内有1个更改会触发生成rdb
save 900 1
#rdb自动策略之 300秒内有10个更改会触发生成rdb
save 300 10
#rdb自动策略之 60秒内有10000个更改会触发生成rdb
save 60 10000

下面进行测试,将策略设置为 60秒变动3次就生成rdb

重启redis

先看 之前的rbd s 20:19生成的

接下来新增3条数据

观察日志

可以看到在60秒内变动超过3条就会触发策略自动生成rdb文件,也可以看出其实就是执行了bgsave 命令,感兴趣的可以自己验证一下

四.其他情况

  1. 全量复制
    redis在主从复制的时候会生成rdb文件来复制
  2. debug reload
    redis提供的debug 重启 就是说不清空内存数据的重启 这种情况也会生成rdb文件
  3. shutdown
    关闭redis 的时候也会触发生成rdb文件
  4. flushall
    清空redis数据 也会生成一个空的rdb文件,因为数据没有了生成的也肯定是一个空的

五.总结

rdb文件都是先生成再替换掉原来的rdb文件,不妨来看看

当执行到save 或者bgsave 的时候会产生一个临时文件,执行完成之后临时文件就被删除掉了

save 同步阻塞

bgsave 异步非阻塞,但是在创建子进程的时候是阻塞的

策略 满足任意策略的都会执行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值