2020/03/21-redis(2)

Redis的持久化

Redis有两种持久化方案:RDB和AOF

1.RDB

触发条件

RDB是Redis的默认持久化方案,当满足一定的条件时,Redis会自动将内存中的数据全部持久化到硬盘。

RDB持久化缺点:可能会造成数据丢失。优点:一次性持久化多条数据,执行效率高。

条件在redis.conf文件中配置,格式如下:

save (time) (count)

当满足在time(单位是秒)时间内,至少进行了count次修改后,触发条件,进行RDB快照。

例如,默认的配置如下:


基本原理

RDB的流程是这样的:

  • Redis使用fork函数来复制一份当前进程(父进程)的副本(子进程)
  • 父进程继续接收并处理请求,子进程开始把内存中的数据写入硬盘中的临时文件
  • 子进程写完后,会使用临时文件代替旧的RDB文件

2.AOF

基本原理

AOF方式默认是关闭的,需要修改配置来开启:

appendonly yes # 把默认的no改成yes

AOF持久化的策略是,把每一条服务端接收到的写命令(增删改)都记录下来,每隔一定时间后,写入硬盘的AOF文件中,当服务器重启后,重新执行这些命令,即可恢复数据。

AOF文件写入的频率是可以配置的:

AOF文件重写

当记录命令过多,必然会出现对同一个key的多次写操作,此时只需要记录最后一条即可,前面的记录都毫无意义了。因此,当满足一定条件时,Redis会对AOF文件进行重写,移除对同一个key的多次操作命令,保留最后一条。默认的触发条件:

原文地址:https://www.cnblogs.com/ShenYian/p/12542436.html