Redis面试题
常见问题
大Key/热Key分析/整库扫描_分布式缓存服务 DCS_常见问题_华为云
备份策略
RDB
rdb:指定时间点上生成的数据集快照
优点:
- 保存某个时间点上的数据;
- 文件紧凑,恢复快;方便传输
- 父进程不受 IO 影响,是从父进程中 fork 一份出来备份的;
缺点:
- 可能造成备份期间的数据丢失;
- fork 过程可能比较耗时(数据集大时,消耗的 CPU 可能导致无法响应客户端)
AOF
aof:所有写操作命令(redis 协议),恢复时执行这些命令
优点:
- 灵活配置 fsync 策略;1)无 fsync;2)每秒一次;3)每次写入都 fsync;(就算发生了故障也是 1 秒,性能也不错;fsync 在后台线程执行)
- 对 aof 日志文件只进行追加操作;
- 文件变大时,会进行重写;
- 以 redis 协议写入日志,易读和修复(flushall)
缺点:
- 相对 rdb,体积更大;
- fsync 策略可能会比 rdb 慢
- 个别 bug
总结:
如果想要非常高的安全性,可以结合 rdb 和 aof 同时使用;在重启的时候,会优先使用 aof 来恢复数据(aof 更完整);
其他:
rdb: 默认存入到 dumb.rdb 文件中;
RDB 手动备份:
SAVE:阻塞主进程,此时客户端无法连接;
BGSAVE:fork 一个子线程,不阻塞主进程,客户端依然可以连接;完成后通知主进程,子进程退出;
可以设置多少秒内有多少变动时触发备份
1 | #save <seconds> <changes> |
AOF 重写:
bgrewrite 可以用来重写,重新生成一个文件,此文件只包含当前数据集需要的最少的指令(因为是 append 的方式 ,对同一个 key 进行操作也会追加多次指令)