redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。redis支持两种持久化方式:
1、snapshotting(快照)也是默认方式。将内存中的数据以快照的方式写入到文件。默认的文件名是dump.rdb。
[root@D2-LZY245 redis-4.0.1]# grep ^save redis.conf
save 900 1
save 300 10
save 60 10000
2、append-only file(aof)的方式。由于快照方式是在一定间隔时间做一次,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。aof比快照方式有更好的持久性,是由于在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
由于os会在内核中缓存write做的修改,所有可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。可以通过配置文件告诉redis想要通过fsync函数强制OS写入到磁盘的时机。
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
# always: fsync after every write to the append only log. Slow, Safest.
# appendfsync always
appendfsync everysec
# appendfsync no