四、持久化方式
AOF
日志,每次追加,文件量大,能设置每秒/没次,那么异常情况下丢失的数据少,文件过大时会重写,即采用最简短的命令描述数据库
RDB
快照式,快照是一次全量备份,异常情况下丢失的数据量较大
RDB文件的创建可以手动触发,也可以自动触发
服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止
save命令:阻塞,服务器不能处理任何命令请求,客户端发送的所有命令也会被服务器拒绝,直到RDB过程完成为止
注意:Redis的单线程模型就决定了,我们要尽量避免所有会阻塞主线程的操作,由于Save命令执行期间阻塞服务器进程,对于内存比较大的实例会造成长时间阻塞,因此线上环境不建议使用
bgsave命令:派生出一个子进程(而不是线程),由子进程进行RDB文件创建,而父进程继续处理命令
注意:
在bgsave命令执行的时候,为了避免父进程与子进程同时执行两个rdbSave的调用而产生竞争条件,客户端发送的save命令会被服务器拒绝
如果bgsave命令正在执行,bgrewriteaof(aof重写)命令会被延迟到bgsave命令之后执行,如果bgrewriteaof命令正在执行,那么客户端发送的bgsave命令会被服务器拒绝
虽然bgsave命令是由子进程进行RDB文件的生成,但是fork()创建子进程的过程会阻塞父进程(fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存和物理内存的映射索引表),这个拷贝过程会消耗大量CPU资源,拷贝完成之前整个进程是会阻塞)
-
因为AOF文件的更新频率通常比RDB文件的更新频率高,所以口如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态。
-
只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】