接上篇文章,redis的持久化的另一种方式AOF
简单介绍一下AOF
以日志的形式来记录每个操作,将入redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,
redis重启的话就根据日志文件的内容将写指令从前到后执行一遍以完成数据的恢复工作
1、先来看一下关于aof的配置文件,redis.conf中默认是关闭的,需要手动的开启,改为yes,aof文件的默认名称是appendonly.aof,也可自行更改
AOF的保存路径,同RDB的路径一致
2、启动redis,并进行添加操作
可以在保存路径下看到出现一个appendonly.aof文件
刚才进行添加操作,放入了k1,k2,k3,可以查看一下aof文件,里面记录了每一个写操作,包括了所操作的库
如果appendonly文件被损坏或者文件里面有不正确的语法和操作,启动的时候会直接报错
如果遇到文件类似的损坏,可通过redis-check-aof --fix appendonly.aof进行修复
3.AOF同步频率设置
4、RDB和AOF同时开启,系统默认取AOF的数据,因为AOF的数据完整性比较好
5、redis的重写
redis如何实现重写?
AOF文件持续增长而过大时,会fork除一条新的进程将文件重写,(也是先写临时文件最后再remote)遍历新的进行内存中数据,每条记录都有一个set语句,重写aof文件的操作
并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点相似
何时重写?
重写虽然可节约大量的磁盘空间,减少恢复时间,但是每次重写还是有一定的负担的,因此设定redis满足一定条件才会进行重写
系统载入或上次重写完毕,redis会记录此时aof的大小,设为base_size,如果redis的aof当前大小>=base_size+base_size*100%(默认)且当前大小>=64mb,(默认)的情况下,redis会对aof进行重写
6、Redis的优缺点
优点:备份机制健全,丢失数据概率更低
可读日志文件,通过操作AOF稳健,可以处理误操作
缺点:比起RDB占更多的磁盘空间
恢复备份速度要慢
每次读写都同步的话,有一定的性能压力
存在个别bug,造成恢复不能
7、用哪个好?
官方推荐两个都用
如果对数据库完整性没有太多要求。可以单独选择用RDB
不建议单独用AOF,因为可能会出现bug
如果单纯的只是做内存缓存,可以都不用