Redis 持久化和aof相关问题
Redis 持久化和aof
Redis 如何实现数据不丢失?
有三种方式实行持久化
- aof,将执行成功的写命令保存到aof文件中,如果aof文件过大会发生aof重写
- rdb,保存内存数据的快照
- 混合模式,同时使用aof和rdb,提高性能
为什么aof要先执行命令再保存命令
不用检查命令合法,不会阻塞当前写的命令
缺点:数据丢失,阻塞后续命令的执行
aof回写的方式有几种
三种策略
- always,每次执行完写命令之后就会将aof缓冲池的内容写入文件
- 优点:可靠性高
- 缺点:性能开销大
- everysec,每隔一秒将aof缓存池的内容写入文件
- 优点:性能适中
- 缺点:丢失1秒的数据
- no,将写入文件的时机交给操作系统
- 优点:性能好
- 缺点:可能丢失很多数据
AOF 日志过大,会触发什么机制?
会触发aof重写机制,aof重写创建一个子进程用来扫描数据库的内容,将内容保存到新的aof文件中,如果数据库新增数据,就会先这个数据保存到aof重写缓冲池中,子进程扫描结束之后就会发送信号给主进程,主进程会将aof重写缓冲池的内容追加到新的aof文件,将新文件改名覆盖旧文件。
为什么aof重写要开启子进程,为什么不是开启子线程
- 开启子进程不阻塞主进程的运行
- 子进程有父进程的内存副本,如果开启子线程,会涉及到加锁,解锁问题,会降低性能。如果父进程的内存发生变化,会拷贝一份到子进程,子进程也就没有加锁解锁问题了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix