快照(snapshotting)

redis可以通过

  • 创建快照来获得存储在内存里面的数据在某个时间点上的副本

  • 在创建快照之后,用户可以对快照进行备份。

  • 可以将快照复制到其他服务器从而创建具有相同服务数据的服务器副本,

  • 可以将快照留在原地等以便服务重启时使用

1. 快照配置

save 60 1000
stop-writes-on-bgsave-error no
rdbcompression yes
dbfilename dump.rdb
dir ./
  • 快照将被写入dbfilename 指定的文件里面

  • 存储在dir选项的路径上

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

2.创建快照的方式

  • 客户端向redis发送BGSAVE 创建快照

    redis会调用fork来创建一个子进程,然后子进程复制将快照写入硬盘,而父进程则继续处理命令请求(不支持windows)

  • 客户端向redis发送SAVE 创建快照(不常用)

    接收到save命令的redis服务器在快照创建完毕之前将不再响应其他命令

    (只会在没有足够的内存区执行bgsave的情况下和即使等到持久化操作执行完毕也无所谓的情况下,才执行)

  • 设置save选项(save 60 10000)

    redis最近一次创建快照之后开始算起,当60秒之内有10000次写入,这个条件满足时,redis就会自动护法BGSAVE命令

    设置多个,满足其中一个就会触发一个BGSAVE

  • 当redis通过shutdown命令接收到关闭服务器请求/接收到标准TERM信号

    会执行一个SAVE命令,阻塞所有客户端,不在执行客户端发送的任何命令

    并在SAVE命令执行完毕之后关闭服务器

  • 当redis服务器连接另一个redis服务器,并向对方发送SYNC命令来开始一次复制操作的时候

    如果主服务器目前没有在执行BGSAVE操作,或者主服务器并非刚刚执行完BGSAVE操作,那么主服务器就会执行BGSAVE命令

3. 快照面临的问题

如果系统真的发生奔溃,用户将丢失最近一次生成快照之后更改的所有数据。

因此,快照持久化只适合那些即使丢失一部分数据也不会赵成问题的应用程序

results matching ""

    No results matching ""