Redis有2种持久化策略: RDB和AOF。
RDB是Redis默认的持久化策略,这种策略是把数据库的快照以二进制形式的副本保存在磁盘上。
-
RDB持久化触发条件
-
SAVE命令: 当客户端执行SAVE命令时,会阻塞Redis主线程进行数据持久化,直到持久化完成。Redis在阻塞期间不能处理客户端的请求。
-
BGSAVE命令: 当客户端执行BGSAVE命令时,Redis会fork一个子进程进行数据持久化,因此并不会阻塞Redis服务。
-
FLUSHALL命令: 当客户端执行FLUSHALL命令时,会清空Redis所有数据库的数据,并且也会触发数据同步。
-
save配置: Redis会按照配置文件中的save配置的条件进行数据同步,一旦满足条件,就会执行BGSAVE命令,即fork一个子进程进行同步。
-
shutdown: 当Redis服务关闭时,也会将数据同步到磁盘,以便下次启动时恢复。
-
-
RDB的优点:
-
文件体积小,恢复大数据较快
-
最大化Redis性能: Redis会fork出子进程进行数据同步,并不影响Redis的性能。
-
-
RDB的缺点:
- 数据安全性较低: 如果不显示的执行SAVE命令,那么Redis隔一段时间才会同步数据,可能会造成一定程度的数据丢失。
AOF策略是把已经执行过的命令以文本的方式追加到AOF文件的末尾,以此达到记录数据库状态的目的。 AOF默认情况下是关闭的,当配置选项 appendonly 设置为yes后才会进行AOF的持久化。
appendfsync指定了AOF的同步策略,它有三个可选值。
-
no: no代表Redis不亲自持久化,而是通过系统调用write函数每隔一段时间将数据写入文件。 这种情况下如果服务器发生故障,可能会有数据还没来得及同步就丢失了。
-
always: always表示Redis每次执行写操作都会将数据同步到文件中。 这种策略虽然保证了数据的安全性,但是对Redis的性能会有影响。
-
everysec: everysec是AOF默认的持久化策略,这种策略下, 系统每一秒都会将数据写入文件,兼顾了性能和数据安全性。
-
AOF优点:
- 数据安全性较高,秒级丢失
-
AOF缺点:
- 文件体积大,恢复大数据较慢
两种持久化方式各有优缺点,可以选择混合的方式进行备份。 混合持久化后,文件的内容大部分都是RDB格式的,恢复起来较快, 以AOF的方式同步也能保证数据的安全性。