持久化
redis所有数据保持在内存中,对数据的更新将异步的保存在磁盘上
持久化方式
- 快照 1: Mysql dump 2:redis rdb
- 写日志 1:mysql binlog 2: hbase hlog 3:redis aof
RDB
redis创建内存--- RDB(二进制)硬盘中
redis启动载入 ----RDB(二进制)
触发机制 主要三种方式
- save(同步)
- bgsave(异步)
- 自动
save命令
客户端 保存文件后创建RDB文件 二进制 保存的时候会阻塞
文件策略:如果存在新的RDB文件会替换老
复杂度:O
bgsave
1:bgsave
2:fork (依然会阻塞redis)
3:create RDB
4:bgsave successfully
子进程
bgsave
background saving started
文件策略和复杂度相同
save与bgsave对比
| 命令 | save | bgsave |
|---|---|---|
| IO类型 | 同步 | 异步 |
| 阻塞 | 是 | 是阻塞在fork |
| 复杂度 | O | O |
| 优点 | 不会消耗内存 | 不阻塞客户端命令 |
| 缺点 | 阻塞客户端命令 | 需要fork,消耗内存 |
自动生成RDB
save配置 :60秒钟 生成1万条
默认配置
| 配置 | seconds | change |
|---|---|---|
| save | 900 | 1 |
| save | 300 | 10 |
| save | 60 | 10000 |
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./
stop-writes-on-bgsave-error yes 如果出现错误是否继续 是
rdbcompression yes 是否对数据进行压缩 是
rdbchecksum yes 是否对数据进行校验 是
dbfilename dump-${port}.rdb
dir /bigdiskpath 大硬盘路径
触发机制 不容忽略方式
1:全量复制
2:debug reload
3:shutdown
mkdir data
mkdir config
rm -rf redis-6382.conf
cp ../redis.conf .
ll
vim redis-6379.conf
#修改配置
daemonize 守护进程方式 yes
pidfile redis-6379.pid
logfile "6379.log"
#save 900 1
#save 300 10
#save 60 10000
dbfilename dump-6379.rdb
redis-server redis-6379.conf
wq
redis-server redis-6379.conf
redis-cli
dbsize
info memory
redis-cli
set hello world
get hello
save
get hello (在阻塞)
bgsave
Background saving started
redis-cli shutdown
redis-server redis-6379.conf
dbsize
RDB总结
1:RDB是Redis内存到硬盘的快照,用于持久化
2:save通常会阻塞redis
3:bgsave不会阻塞redis,但是会fork新进程
4:save自动配置满足任一就会被执行
5:有些触发机制不容忽视
本文深入探讨Redis的RDB持久化机制,包括快照生成、数据恢复、触发机制及配置策略,对比save与bgsave指令,解析RDB在内存与硬盘间的数据迁移过程。
1851

被折叠的 条评论
为什么被折叠?



