这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
Redis持久化
Redis为了保证效率,数据缓存在了内存中,但是内存中的数据无法永久保存,若需要永久保存数据,则需要Redis的持久化。
RDB (Redis DataBase)
RDB持久化方式能够在指定的时间间隔内对数据进行快照存储。
Redis会单独创建(fork)一个子进程来进行持久化。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
触发机制
- 满足配置文件中设置的save规则
- 执行save、bgsave命令
将rdb文件存放在Redis的启动目录,Redis启动时会自动检查dump.rdb,恢复其中的数据。
优点
- 适合大规模的数据恢复
- 对数据的完整性不高
缺点
- 需要一定的时间间隔进程操作,如果Redis意外宕机了,最后一次修改的数据就会丢失
- fork进程时会占用一定的内存空间
AOF操作
appendonly.aof
只能追加文件,不可以修改文件。
Redis重启时,根据日志文件的内容,将写命令从前到后执行一次,以完成数据的恢复工作。
优点
- 每一次修改都同步,文件的完整性更好
- 每秒同步一次,可能会造成丢失
- 不同步,效率更高
缺点
- 相对于数据文件来说,aof远远大于rdb,修复速度也比rdb慢
- aof的运行效率也比rdb慢
以日志的形式来记录每个写操作(不记录读操作),将Redis执行过的所有指令记录下来。先执行命令,后写入日志。
写后日志
对应 MySQL 的写前日志。
Redis不会对命令进行语法检查,避免出现记录错误命令的情况。
缺点:
- 数据可能丢失:Redis刚执行完命令,发生宕机,未写入日志;
- 阻塞其他操作:AOF在主线程执行,写日志时会阻塞后续的操作。
如果你发现了文章出现了错误或有不足,欢迎在评论区和我交流,我看到了一定会回复。
写文章不易,如果你觉得文章对你有帮助,麻烦点一下点赞、收藏,你的支持是我写文章的最大动力!