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的多次操作命令,保留最后一条。默认的触发条件: