前言
redis是一个支持持久化的数据库,也就是说redis需要将内存中的数据往硬盘中来保持持久化。
redis持久化有两种方式:
- snapshotting(快照)方式,也即RDB方式
- append-only(aof)方式
RDB
snapshotting(快照)方式,也即RDB方式,是redis的默认方式,将内存中的数据库以快照方式写入二进制文件中(dump.rdb),可以通过配置文件设定,在一段时间n秒内,修改了超过m个key,则自动做快照。
快照方式刷盘有时间间隔,应对突发状况会导致最近一次快照以后的数据全部丢失。在数据不强求完整性的情况下可以选择这种方式。
snapshotting的默认设置如下:
save 900 1 # 900s内 1个key被修改 则自动刷盘,下同理
save 300 10
save 60 10000
AOF
append-only(aof)方式在每一次写命令后都会写入到aof文件中。当服务器重启后会将执行aof中存储的全部命令以恢复数据库。
aof方式默认也不是立即写到磁盘中,可以通过配置文件修改策略,在性能和持久性中找一个平衡。
aof设置如下
appendonly yes # 开启aof模式
# appendfsync always # 接到命令立即写入磁盘,性能差,持久性强
# appendfsync everysec # 每秒写盘一次,性能和持久化折中,默认是这种方式
# appendfsync no # 性能最优,但持久性依赖OS,just let the OS flush the data when it wants.
redis使用率高的情况下每秒10W+的命令是常有的,因此在生产环境下使用always是最稳妥的策略。