Redis有两种持久化机制,RDB(Redis Database)和AOF(Append Only File)
RDB持久化:
在指定的时间间隔将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里。
具体来说,Redis会单独创建(fork)一个子进程来进行持久化,它将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
优点:
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。
缺点:
RDB在一定间隔时间做一次备份,所以如果redis意外宕机的话,最后一次持久化后的数据可能丢失。
另外,在备份的时候,内存中的数据被克隆了一份,导致需要更多的存储空间。
开启方式:
在redis.conf中的SNAPSHOTTING下,配置save <seconds> <changes>(save 保存间隔 更改次数),例如save 900 1(每900秒保存一次,如果有至少一个key发生改变)
AOF持久化:
记录服务器接收到的每一个写操作(读操作不记录),这些操作将在服务器启动时再次执行,重新构建原始数据集。
优点:
同步持久化,每次发生数据变更会被立即记录到磁盘,数据完整性比较好。
它有序地保存了对数据库执行的所有写操作,这些操作以Redis协议的格式保存,其内容可读性高,方便分析。
缺点:
备份相同的数据,AOF文件要远大于RDB文件,恢复速度慢于RDB。
开启方式:
在redis.conf中的APPEND ONLY MODE下,配置appendonly yes,配置appendfsync always(意为每次执行写操作都进行备份,也可改为appendfsync everysec每秒备份)
持久化建议:
在Redis中同时使用AOF和RDB进行持久化。这种情况下,当Redis重新启动时会优先使用AOF文件来重建原始数据集,因为它保存的数据更加完整。但不要仅使用AOF,通过RDB备份的数据在某些极端情况下也可能会派上用场(比如对数据完整性要求不高但需要快速恢复的情况、AOF文件故障的情况)。
当然,如果只希望数据在Redis运行期间存在,可以禁用持久化。