redis提供两种不同的持久化方法:
1.快照(snapshotting)可以将存在于某一时刻的所有数据都写入硬盘
2.只追加文件(append-only file,AOF)会在执行写命令时,将执行的写命令复制到硬盘

配置选项

#快照持久化选项
save 60 1000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump.rdb

#AOF持久化选项
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

dir ./

快照持久化

如果在新的快照文件创建完毕之前,Redis、系统、硬件三者任意一个崩溃,将丢失最近一次创建快照之后写入的所有数据。

创建快照的方法:

  • 客户端通过向Redis发送BGSAVE命令来创建一个快照(win平台不支持)。Redis会调用fork来创建一个子进程,然后子进程负责将快照写入硬盘,而父进程则继续处理命令请求。
  • 客户端还可以通过向Redis发送SAVE命令来创建一个快照,接到SAVE命令的Redis服务器在快照创建完毕之前将不再响应其他命令。
  • 如果设置了save配置选项,如save 60
    10000,从Redis最近一次创建快照之后算起,当“60秒之内有10000次写入”这个条件满足时,Redis就会自动触发BGSAVE命令。
  • 当Redis通过SHUTDOWN命令接收到关闭服务器的请求时,或者接收到标准TERM信号时,会执行一个SAVE命令,阻塞所有客户端,不再执行客户端发送的任何命令,并在SAVE命令执行完毕之后关闭服务器。
  • 当一个Redis服务器连接另一个Redis服务器,并向对方发送SYNC命令来开始一次复制操作的时候,如果主服务器目前没有在执行BGSAVE操作,或者主服务器并非刚刚执行完BGSAVE操作,主服务器就会执行BGSAVE命令。

AOF持久化
AOF持久化会将被执行的写命令写到AOF文件的末尾。只要从头执行一次AOF文件包含的所有写命令,就可以回复AOF文件所记录的数据集。

appendfsync选择及同步频率

always

每个Redis写命令都要同步写入硬盘,将发生系统崩溃时出现的数据丢失减到最少。这种同步策略需要对硬盘进行大量写入,处理命令的速度会受到硬盘性能的限制。

everysec

每秒执行一次同步,显式地将多个命令同步到硬盘。兼顾数据安全和写入性能,以每秒一次频率对AOF文件进行同步。出现系统崩溃,最多只丢失一秒之内产生的数据。

no

不对AOF文件执行任何显示的同步操作,而是让操作系统来决定何时对AOF文件进行同步。一般情况不会对Redis的性能带来影响,但系统崩溃将导致使用这种选项的Redis服务器丢失不定数量的数据。另外,如果用户的硬盘的处理写入操作速度不够快的话,那么当缓冲区被等待写入硬盘的数据填满时,Redis的写入操作将被阻塞,并导致Redis处理命令请求的速度变慢。因为这个原因,一般来说并不推荐使用appendfsync no选项。

parvin
424 声望26 粉丝