本文共 2072 字,大约阅读时间需要 6 分钟。
redis将所有数据保存在内存中,对数据的更新异步地保存在磁盘上
RDB存在的问题
RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。
调用forks 生成一个子进程 子进程复制数据集到一个临时的rdb文件中 当子进程完成对数据集的复制后,redis会用新的rdb文件,并删除旧得rdb文件
redis> saveok
过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEl1FSOy-1572053410723)(media/15637201103316/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202019-07-21%2022.56.06.png)]两者对比
save与sbgsave| 命令 | save | bgsave |
| — | — | — |
| IO类型 | 同步 | 异步 | | 阻塞? | 是 | 是(阻塞发生在fork) | | 复杂度 | O(n) | O(n) | | 优点 | 不消耗额外的内存 | 不阻塞客户端命令 | | 缺点 | 阻塞客户端命令 | fork消耗内存 |save 900 1
save 300 10 save 60 10000 dbfilename dump.rdb dir ./ (设置路径) stop-writes-on-bgsave-error yes(如果bgsave发生错误就停止写入) rdbcompression yes(采用压缩格式) rdbchecksum yes(采用校验和)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tz5XGcNh-1572053410724)(media/15637201103316/%E5%9B%BE%E7%89%87%201.png)]
| 时间戳 | save | | — | — | | T1 | 执行多条命令 | | T2 | 满足RDB条件自动创建 | | T3 | 再次执行多条写命令 | | T4 | 宕机 | | | 数据丢失 |
写一条命令,就在AOF增加一条命令。当redis宕机,就是用AOF对数据进行完整恢复。
命令 | always | everysec | no |
---|---|---|---|
优点 | 不丢失数据 | 每秒一次Sync丢1秒数据 | 不用管 |
缺点 | 1O开销较大,一般的sata盘只有几百TPS | 丢1秒数据 | 不可控 |
原生AOF | AOF 重写 |
---|---|
set hello world | set hello hehe |
set hello jave | |
set hello hehe |
减少磁盘占用量,加快恢复速度
两种方式
bgrewriteaof(fork子进程,完成重写) AOF重写配置配置
| 配置名 | 含义 |
| — | — | | Auto-aof-rewrite-min-size | AOF文件重写需要的尺寸 | | Auto-aof-rewrite-percentage | AOF增长率 |统计
| 统计名 | 含义 |
| — | — | | aof_current_size | AOF 当前尺寸 | | aof_base_size | AOF上次启动和重写的尺寸 |自动触发机制
aof_current_size > Auto-aof-rewrite-min-size (aof_current_size - aof_base_size)/aof_base_size > Auto-aof-rewrite-percentageAOF重写流程
转载地址:http://vzorb.baihongyu.com/