四、持久化方式

AOF

日志,每次追加,文件量大,能设置每秒/没次,那么异常情况下丢失的数据少,文件过大时会重写,即采用最简短的命令描述数据库

RDB

快照式,快照是一次全量备份,异常情况下丢失的数据量较大

RDB文件的创建可以手动触发,也可以自动触发

服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止

save命令:阻塞,服务器不能处理任何命令请求,客户端发送的所有命令也会被服务器拒绝,直到RDB过程完成为止

注意:Redis的单线程模型就决定了,我们要尽量避免所有会阻塞主线程的操作,由于Save命令执行期间阻塞服务器进程,对于内存比较大的实例会造成长时间阻塞,因此线上环境不建议使用

bgsave命令:派生出一个子进程(而不是线程),由子进程进行RDB文件创建,而父进程继续处理命令

注意:

  1. 在bgsave命令执行的时候,为了避免父进程与子进程同时执行两个rdbSave的调用而产生竞争条件,客户端发送的save命令会被服务器拒绝

  2. 如果bgsave命令正在执行,bgrewriteaof(aof重写)命令会被延迟到bgsave命令之后执行,如果bgrewriteaof命令正在执行,那么客户端发送的bgsave命令会被服务器拒绝

  3. 虽然bgsave命令是由子进程进行RDB文件的生成,但是fork()创建子进程的过程会阻塞父进程(fork子进程需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存和物理内存的映射索引表),这个拷贝过程会消耗大量CPU资源,拷贝完成之前整个进程是会阻塞)

 

  • 因为AOF文件的更新频率通常比RDB文件的更新频率高,所以口如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态。

  • 只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态

posted @   上好佳28  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示