Redis의 지속성 원리를 자세히 살펴보세요
Redis는 데이터의 지속성을 보장하기 위해 RDB와 AOF라는 두 가지 지속성 방법을 제공합니다. Redis는 인메모리 데이터베이스입니다. 데이터베이스는 데이터의 지속성을 보장하기 위해 RDB와 AOF라는 두 가지 지속성 방법을 각각 제공합니다. 이 두 가지 지속성 방법의 구현 원리를 각각 살펴보겠습니다.
RDB(기본값)
RDB는 특정 조건이 충족되면 자동으로 메모리의 데이터를 디스크에 유지합니다. 스냅샷을 실행하는 타이밍은 사용자 정의 구성된 스냅샷 규칙을 따릅니다. (redis.conf에서 구성, 아래 자세히 설명)
mysql 동영상 튜토리얼
)rdb 파일을 정기적으로 백업하면 redis 데이터를 백업할 수 있습니다. RDB는 압축된 바이너리 파일로 공간을 적게 차지하고 전송에 도움이 됩니다.
단점: 지속성을 위해 RDB를 사용하면 redis가 갑자기 비정상적으로 종료되면 마지막 스냅샷 이후의 데이터가 손실됩니다. 그러나 데이터 손실을 줄이고 허용 범위 내에 있는지 확인하기 위해 조합을 기반으로 자동 스냅샷을 설정할 수 있습니다. 데이터가 더 중요하다면 AOF 방법을 사용할 수 있습니다
# 开启appendonly参数appendonly true# 设置AOF文件位置dir ./# 设置AOF文件名称,默认是appendonly.aofappendfilename appendonly.aof<br/>
Redis 클라이언트는 RESP 프로토콜을 사용하여 Redis 서버와 통신합니다. 이 프로토콜은 Redis용으로 특별히 설계되었지만 다른 C-S 프로젝트에도 사용할 수 있습니다.
간단한 문자열은 '+'로 시작
캐시 추가
AOF程序接收到命令参数之后,会将其从字符串对象转换成协议内容,再将协议内容追加到AOF缓存中。AOF缓存是在redisServer结构的aof_buf中,新的内容会被追加到aof_buf末尾。aof_buf保持着所有未被写入到AOF文件的协议文本。
将AOF缓存内容写入到AOF文件,并保持到磁盘。 当服务器的常规函数被执行,或者事件处理器被执行的时候,flushAppendOnlyFile函数将会被执行。会有以下两个过程。
AOF一共有三种保存模式
Redis可以在AOF文件过大的时候,在后台(子进程)对AOF文件进行重写。重写之后的新文件,包含恢复当前数据集所需的最小命令集合。重写,并不会对AOF文件进行读取和写入,针对的是数据库中的当前键。
优化前set s1 1set s1 2set s1 3优化后set s1 3<br/>
AOF的重写是通过子进程实现的,因此,主线程是继续工作的,有可能对新的数据进行修改,有可能会导致数据库的数据和重写之后的数据不一致。redis通过增加一个AOF重写缓存来解决这个问题,当fork出子进程之后,新的命令不仅会追加到现有的AOF文件中,还会添加一份数据到这个缓存当中。
Redis创建新的AOF文件之后,会继续将命令添加到原有的AOF文件中,即使数据库突然宕机了,原有的AOF文件和文件内容也不会有损失。而当新的AOF文件创建完毕之后,会直接把旧的替换掉,往新的AOF文件中添加命令。
当子进程在进行重写时,主进程会完成下列工作
这样程序就完成了新旧AOF文件的替换工作。而当处理完成之后,主进程就会继续接受请求。整个重写过程中只有最后的缓存写入和改名替换的操作会导致主进程阻塞,其他时候不会影响redis的正常工作,把AOF重写对redis的性能影响降到最低。
优化触发条件
#当前的AOF文件超过上次重写时AOF文件大小百分几的时候进行重写,如果没有重写过,则以启动时AOF文件的大小为准auto-aof-rewrite-percentage 100#限制允许重写的最小的AOF文件,也就是文件小于这个值的时候不需要进行重写优化auto-aof-rewrite-min-size 64mb<br/>
本文转载自:https://database.51cto.com/art/202002/610825.htm
更多redis知识请关注redis数据库教程栏目。
위 내용은 Redis 지속성 원칙 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!