Redis持久化
持久化是为了数据重用或者防止系统崩溃后数据丢失,甚至就是保存计算后的结果方便使用等。redis支持两种方式来进行持久化将数据写入磁盘,分别是 快照以及aof。web
1.快照
什么是快照redis
快照就是获取存储在内存中的数据在某个时间点的副本,在建立快照后,用户能够对快照进行备份,能够将快照放到其他服务器上进行恢复数据或者建立数据,还能够放在本地,方便系统重启后恢复数据服务器
如何触发快照并发
经过redis.conf配置文件中配置 save 触发选项来触发,第二个参数表示多长时间,以秒为单位,第三个参数是写入次数,例如 save 60 10000 意思是 在60秒内写入了10000次就会触发 快照,若是设置了多个save,则只要知足其中要给条件都会建立一个快照app

在redis客户端执行 bgsave 命令,服务器在接收到该命令后不会阻塞客户端的请求,会fork一个子进程来对数据进行备份svg
在redis客户端执行 save命令,服务器在接收到该命令后会中止接收客户端请求,知道备份完成后才会继续接收客户端请求,通常该方法使用很少,在服务器内存不够用的状况下,执行save命令性能
在使用shutdown等命令后,服务端会当即使用 save命令模式,再也不接受任何而客户端请求,等待备份完成后关系服务器操作系统
当有两台服务器,其中一台服务器链接另外一个服务器,并发送了一个 sync同步命令后,那么主服务器会执行 bgsave模式线程
快照的优处日志
- 经过快照的方式能够生成多个储存文件,将这些文件放到别的服务器上能够快速恢复数据。
- 生成快照占用io资源少,不用频繁写操做,只用fork一个子线程操做便可。
- 相对于aof方式来讲,直接基于快照的方式恢复和重启redis进程更加快速。
快照的劣势
- 快照默认是根据某个时间段写入频率来触发建立,这意味着若是在建立一个快照后,尚未到下一次快照建立前,写入了假如20个key,redis服务器异常断开,那么这段时间内的 20个key 数据将会所有丢失,不能保证数据完整性。
- 当快照文件比较大之后,每次建立新的快照,会致使对客户端的服务暂停数毫秒,甚至数秒。
2.AOF
什么是AOF
aof是将redis的写操做以日志记录的形式追加到 aof文件中保存,每次有写操做,都会向该文件追加,所以,redis重启或恢复数据都是将aof中的记录的命令从新所有执行一次达到恢复数据的目的
如何开启aof
- 配置 appendonly yes 来开启
- 经过配置 appendsync 选项来 决定同步频率, appendsync 对应有三个选项
- always:每一个redis写命令都是记录追加到aof文件,这样会严重下降redis的速度
- everysec:每秒执行一次同步,显式的将多个写命令同步到硬盘
- no:让操做系统来决定应该什么时候进行同步
AOF的优处
- 通常配置每秒进行写入同步,这样能够很好的数据的完整性,最多只会丢失一秒的数据
- aof日志文件以appendonly模式写入,全部没有任何磁盘寻址的开销,能够很快找到文件并写入文件,并且文件不容易破损,且还能够修复
- 当aof文件过大的时候,可能会出现后台重写操做,也不会影响客户端的使用,在建立新的日志文件时候,会将老文件压缩,提取恢复数据的最小日志出来。
AOF的劣势
- 针对快照来讲,aof文件相对要大得多
- 每秒写入文件,性能相对快照而言相对会下降,但仍是很快
- 之前AOF出现bug,就是经过aof日志恢复数据,没有恢复的一摸同样,因此相对快照这种稳定的恢复数据方式来讲更加脆弱一点。
3.如何抉择
- 不要只用快照,由于这样可能会致使丢失不少数据
- 不要只用aof,由于使用aof作冷备没有使用快照作冷备恢复数据来的快,而且没有快照稳定
- 所以,最好二者都使用。使用aof保证数据不丢失,做为恢复数据的第一选择。用快照用不一样程度的冷备,在aof文件丢失或者损坏的状况下还可使用快照进行恢复。