Redis 笔记(二):分布式缓存-主从集群
1 RDB (数据快照)
概念
RDB(Redis Data Backup file) = Redis 数据备份文件 = Redis 数据快照
把内存中的所有数据都记录到磁盘中。Redis 实例故障重启后,从磁盘读取快照文件恢复数据。
.rdb 文件默认保存在当前运行目录。
save 命令 和 bgsave 命令
- save:由 Redis 主进程来执行 RDB,会阻塞所有命令
完成后返回 “ok” - bgsave:开启子进程异步执行 RDB,避免主进程受到影响
会立刻返回 “background saving started”
配置
Redis 会默认在服务停止时触发 RDB,但是也可以在 redis.conf 中配置,格式如下:
1 | # 900 秒内如果至少有 1 个 key 被修改,就执行 bgsave |
其他常用配置:
1 | # 是否压缩,建议不开启,因为也会消耗 CPU,而磁盘相对很不值钱 |
bgsave 底层实现细节
基本流程:
- fork 主进程得到一个子进程(这个过程会阻塞主进程),共享共享主进程的内存空间(这样速度快)
- 子进程读取内存数据,异步写入写入新的 RDB 文件
- 用新的 RDB 文件替换旧的 RDB 文件
fork 采用的是 copy-on-write 技术:
- 当主进程执行读操作时,访问共享内容
- 当主进程执行写操作时,则会拷贝一份数据,执行写操作
缺点
- RDB 执行间隔时间长,两次 RDB 之间写入的数据有丢失的风险
- fork 子进程、压缩、写出 RDB 文件都比较耗时
2 AOF (追加模式)
概念
AOF(Append Only File),追加文件
Redis 处理的每一个写命令都会记录在 AOF 文件,可以看作是命令日志文件。
配置
开启
AOF 默认是关闭的,需要在 redis.conf 中配置开启:
1 | # 是否开启 AOF 功能,默认 no |
配置 AOF 的命令记录频率
1 | # 每执行一次写命令,立即记录到 AOF 文件(几乎不丢数据,性能影响大) |
bgrewriteaof 命令
因为是记录命令,AOF 文件会比 RDB 文件大得多;而且 AOF 会记录对同一个 key 的多次写操作,但只有最后一次写操作才有意义。
-> 可以通过执行 bgrewriteaof 命令,让 AOF 文件执行重写功能,用最少的命令达到相同效果。
Redis 也会在触发阈值时自动重写 AOF 文件。阈值配置:
1 | # AOF 文件比上次文件增长超过多少百分比则触发重写 |
3 RDB vs AOF
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ...!