RDB:redis data base
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的snapshot快照,他恢复时是将快照文件直接写读到内存
Redis会单独创建(fork)一个子进程进行持久化,会先将数据写入到一个临时文件,带持久化过程结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常铭感,那RDB方式要比AOF方式更加高效。
RDB的缺点是最后一次持久化的数据可能丢失。
rdb和AOF持久化文件目录
dir ./ 表示启动redis的目录
当Redis无法写入硬盘,直接关闭Redis 的写操作,推荐yes
对存储到内存的快照,可以设置是否压缩存储,如果yes的话,Redis会进行LZF算法进行压缩。
在存储快照后,还可以让Redis使用CRC64算法进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望取到最大的性能提升,可以关闭此功能。推荐yes。
格式:save 秒钟 写操作次数
RDB是整个内存压缩过的snapsbot,RDB的数据结构,可以配置符合的快照触发条件
默认是一分钟改了1万次,或者5分钟改了10次,或者15分钟改了1次。
不设置save指令,或者给save传入空字符串
save时只管保存,其他不管,全部阻塞,手动保存,不推荐
bgsave:Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。
可以通过lastsave命令获取最后一次成功执行快照的时间。
动态停止RDB:redis-cli config set save “” #save 后给空值,表示禁用保存策列
永久停止: 修改redis.conf 文件
备份机制更文件,丢失数据概率耕地
可读的日志文本,通过操作AOF稳健,可以处理误操作。
比起RDB占用更多的磁盘空间
恢复备份要慢
每次读写都同步的话,有一定性能压力
存在个别bug,造成不能恢复
可以在redis.conf中配置文件名称 ,默认位appendonly.aof
AOF的备份机制和性能虽然和RDB不同,但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。
如果AOF文件损坏,通过user/local/bin/redis-check-aof --fix appendonly.aof进行恢复
备份写坏的AOF文件
重启redis ,然后重新加载
是什么∶
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集.可以使用命令 bgrewriteaof。
重写原理,如何实现重写
AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename), redis4.0 版本后的重写,是指上就是把 rdb 的快照,以二级制的形式附在新的aof头部,作为已有的历史数据,替换掉原来的流水账操作。"
开启重写
no-appendfsync-on-rewrite : yes
触发机制
Redis 会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。
auto-aof-rewrite-percentage :设置重写的基准值,文件达到100%时开始重写(文件是原来重写后文件的2倍时触发),
auto-aof-rewrite-min-size:设置重写的基准值,最小文件64MB。达到这个值开始重写。
I
官方推荐两个都启动
如果对数据不敏感,可以选择单独用RDB
不建议单独用AOF,因为可能会有bug
如果只做纯内存缓存,可以都不用