redis是一款基于内存的存储系统,掉电后数据将会全部丢失,为此redis支持一定的数据持久化能力,仅是持久化至本地磁盘。
在持久化时,支持全量模式和增量模式;
全量模式即将此时内存中数据做一次快照全部存储与本地磁盘中,由于本地磁盘大小往往远大于内存大小,且新生成的快照信息会覆盖旧的快照信息,因此不会存在什么磁盘溢出的危险。
缺点是每次全量的将内存数据写入至磁盘且redis是一个单线程执行请求的。因此会对吞吐量造成一定的压力(save)
全量写入的两个命令是SAVE/BGSAVE,可有客户端触法,也可配置定时任务触法,也可在redis shutdown时触法,BGSAVE是fork一个子线程,期间不影响redis对外服务的可用性。
增量模式即AOF(apend only file)保存的是数据的“变迁” 也就是记录每次的命令 类似mysql中基于语句的日志记录,优点是只记录执行的语句,每次磁盘操作很短,对写入操作影响小。
随着执行语句的不断增长,对应的aof文件会不断变大,可能会占用大量的磁盘空间,后续的aof操作也会越来越慢,为此可采用全量+增量复合的模式进行优化,原理是设置一个定时任务定时保存内存快照,在快照生成及持久化至磁盘过程中的语句记录至对应的磁盘文件中,定时周期内的语句使用aof记录至相应的aof文件中,这样就能避免磁盘文件不断膨胀的问题。