今天面试被问到redis的持久化问题,然后今天晚上看会书复习一下,然后做一些笔记,以后查阅看、。
一 持久化方式
1.redis 的持久化的主要意义在于避免进程退出而造成的数据丢失,当下次重启时候可以利用之前持久化的文件失效数据的恢复。方式主要2种RDB和AOF
1.1RDB
把当前进程数据保存硬盘,通过自动或者手动方式触发
手动触发两个方式:sava和bgsave命令
save:阻塞当前redis服务器,直到RDB完成,可能会造成长时间阻塞
bgsave:redis执行fork操作创建子进程,由子进程完成。
bgsave可以自动触发,通过save相关配置或者从节点执行全量复制
1.1.1RDB的文件处理
通过配置dbfilename,也可以通过命令动态执行设置保存路径
压缩算法:redis默认使用LZF算法对生成的RDB文件进行压缩
1.1.2 RDB的优缺点
优点:代表Redis在某个节点的数据快照,适合备份全量复制,如定时执行bgsave备份,并把文件定时保存到远程文件夹或者HDFS中
加载rdb恢复数据比AOF快很多
缺点:不能像AOF一样实时秒级持久化,因为每次都要创建子进程,系统性能消耗比较大,各个版本的rdb兼容性不好
1.2AOF
以独立日志方式记录每次写命令,重启时候重新执行AOF文件里面命令达到恢复数据方式,可以解决数据实时性问题
1.2.1使用AOF
默认不开始,需要配置开启
AOF的工作流程:命令写入,文件同步,文件重写,重启加载。
命令写入:文本方式
文件同步,三个配置appendfsync控制
always:每次写入都要同步,TPS比较低,不适合
no:数据安全没法保证
everysec:默认配置,
重写机制:文件越来越大,需要开启压缩,可以通过自动好手动方式触发
重启加载:AOF开启并存在文件时候,优先加载,如果AOF关闭或者文件不存在时候,加载RDB文件。