4-redis持久化
持久化选择:
- 保存快照:就是现在内存的状态
- 记录日志:记录执行了 哪些命令
4.1-基本原理

持久化文件加载:

4.2-RDB持久化
redis database,将redis全量数据写到持久化文件中,系统默认开启rdb.
4.2.1-持久化执行
save命令手动执行,执行期间会阻塞redis服务,redis不能处理任何请求bgsave命令,在后台保存,此时redis还能服务
4.2.2-RDB优化配置
在redis.conf 中的 SNAPSHOTTING 模块
设置保存点
save 3600 1 300 100 60 10000
# 每3600秒内如果有一次写入执行一次bgsave
# 300 秒内写入100次,自动执行bgsave
# 60 秒内发生1W次写入,自动执行一次bgsave
容灾处理
stop-writes-on-bgsave-error yes
# 当RDB被开启,至少有一个保存点,如果RDB报错,就停止写入操作(目的是使用户意识到数据没有写到磁盘,避免其他灾难问题
# 如果此问题修复,那么写入自动恢复
# 如果有其他监控,可以设置成false
rdbcompress yes
# rdb压缩,使用LZF算法,默认开启
# 关闭可以节省CPU(拿空间换时间)
rdbchecksum yes
# 校验rdb文件
# 在rdb5 版本中使用 CRC64 算法,健壮性更强,性能低 10%
sanitize-dump-payload no
# 对ziplist 和 listpack 使用检测
rdb-del-sync-file
# 主从集群,是否同步文件
4.2.3-rdb文件结构
使用vim打开试试?


SOF(start of file
常量,一个字符串(REDIS)
rdb_version
rdb版本号
EOF(end of file
常量,1字节,表示数据的结束。
后面是接下来是校验和部分
check_sum
使用CRC校验,判断文件是否损坏
使用 SOF + rdb_version + 内存数据快照 和 check_sum 做除法,余数为 databases
databases

- SODB:常量,占1字节,用于标识数据库的开始
- db_number:数据库编号
- key_value_pairs:当前数据库中键值数据
- 每个pairs由以下部分构成
- ValueType:值的类型
- Key
- Value

4.3-RDB持久化过程
- fork出bgsave子进程
child child写入到临时文件- copy期间新数据会写到另一内存区域(Copy-on-Write)
- copy完毕后,再将内存副本写到临时文件

4.3-AOF持久化
固态硬盘:适合顺序读写,不适合随机读写