redis的持久化

redis支持两种持久化方式RDB(Redis Database)和AOF(Append only file)。
1. RDB
 a. 在指定的时间将内存中的数据集快照写入磁盘,默认存储文件的名称为dump.rdb
 b. RDB文件是一个紧凑压缩的二进制文件
 c. 恢复大数据集的时候速度比AOF要快,适合数据备份和灾难恢复
 d. 何时产生快照
  i. 手工:
   • save命令:会阻塞Redis服务器直至RDB过程完成为止
   • bgsave命令:fork创建子进程,在后台异步执行快照操作,同时还可以响应其他请求,但可能丢失数据
  ii. 自动
   • 通过在配置文件中配置save m n, 数据集在m秒更改n次时触发bgsave操作,可以同时配置多个策略
   • 主从架构时,当从节点发送sync给主节点时,主节点触发bgsave操作
 e. 相关配置
  i. dir:rdb文件存放的目录
  ii. dbfilename:rdb文件的名称
  iii. rdbcompression:yes 是否压缩数据
  iv. rdbchecksum:yes 导入时是否检查
2. AOF
 a. 采用追加文件的方式,把每次的写命令记录到日志,重启时重新执行AOF文件中的命令来恢复数据
 b. 可以通过redis-check-aof来解决写入时宕机的问题
 c. rewrite重写:AOF文件越来越大,包含很多的无效命令,通过定期重写来压缩AOF文件
  i. 手动触发:调用bgrewriteaof命令
  ii. 通过配置触发;
   • auto-aof-rewrite-min-size: AOF重写时文件的最小体积,默认为64M
   • auto-aof-rewrite-percentage: 当前AOF文件空间和上一次AOF文件空间的比值
 d. 基本原理:
  i. redis每次写入时,都是把命令追加到aof_buf缓冲区
  ii. AOF根据策略向硬盘做同步操作,高频的AOF会带来影响
 e. 基本配置:
  i. appendonly:是否开启AOF,默认为no
  ii. appendfilename:AOF文件名称
  iii. dir:AOF文件存储路径
  iv. appendfsync:同步方式(always | everysec | no)
   • always: 每次修改都会写入AOF,性能较差
   • everysec:每秒同步一次(默认)
   • no:由操作系统控制,性能最佳但最不安全
  v. no-appendfsync-on-rewrite: aof重写期间是否同步
  vi. aof-load-truncated: aof尾部文件出现问题时如何处理,yes表示写日志继续,no表示等待修复后写入
3. rewrite的混合模式
 a. 结合rdb和aof
 b. 在aof重写的时候,以rdb形式进行重写(即二进制形式),这样aof的文件更小
 c. 恢复数据时,先按照aof恢复,如不存在,则查找rdb是否存在
 d. 4.0版本之后已经开始支持混合模式

posted @ 2023-09-12 16:18  gengone  阅读(10)  评论(0编辑  收藏  举报