Redis持久化解决方案
RDB
RDB存储的重点在于数据本身,将数据持久化存入后缀为.rdb的文件中,即快照,每隔一段时间记录新的数据,像快速拍照一样,每次拍完放在一边,用的时候快速恢复。所以叫快照
AOF
AOF在于记录操作过程,将指令以日志的形式保存存储操作过程,存储格式复杂
----------------------------------------------------------------------------------------------------------------------------------------
Redis持久化之RDB
RDB的启动方式——save指令 手动执行保存
保存后持久化的文件 .rdb
工作原理
Redis是单线程,所有命令都会在类似队列中排好队,不建议使用save指令,因为save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成位置,有可能会造成长时间阻塞,线上环境不建议使用
-
RBD单线程问题解方案
后台执行 -----命令bgsave 作用:手动启动后台保存操作,但不是立即执行
开启后自动保存
注:
1.bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用,注意bgsave持久化的时候是持久化bgsave命令之前的数据
2.save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的
3.save配置中对second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系
4.save配置启动后执行的是bgsave操作,每个小时 数据的增删改的操作 增加 删除 修改
RDB优缺点
-
优点
1.RDB是一个紧凑压缩的二进制文件,存储效率较高
2.RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
3.RDB恢复数据的速度要比AOF快很多
应用: 服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复
-
缺点
1.RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具体较大的可能性丢失数据
2.bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能
3.Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现个版本服务之间数据格式无法兼容现象(比如3.x和4.x的版本)
4.也有可能在在开启子就进行持久化,然后设置了新数据,设置完了之后服务器宕机了
-----------------------------------------------------------------------------------------------------------------
Redis持久化之AOF
AOF
AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改为记录数据产生的过程
AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式
AOF写数据的三种策略
-
1.always
与rdb的手动save操作相同,每次写入操作均同步到AOF文件中,数据零误差,性能较低
-
2.everysec
每秒将缓冲区中的指令同步到AOF文件中,数据准确性高,性能较高,再系统突然宕机的情况下最多丢失1秒内的数据
-
3.no(系统控制)
由操作系统每次同步到AOF文件的周期,整体过程不可控
开启功能
1.配置
appendonly yes|no
作用:是否开启APF持久化功能,默认为不开启
2.配置
appendfsync always|everysec|no
作用:AOF持久化指令的方式
always每次在写的时候都会记录一下,但get操作不会记录
AOF持久化数据的缺点
在进行数据的添加时,同时对一个key进行多次添加,但只有最后一次操作的数据是有效的,重复的指令被同步到了aof文件中,造成了冗余
-
解决方案:重写AOF
将同样一个数据的若干个命令执行结果转换为最终结果数据对应的指令进行记录
AOF重写作用:
降低磁盘占用量,提高磁盘利用率
提高持久化效率,降低持久化写时间,提高IO性能
降低数据恢复时间,提高数据恢复效率
AOF重写规则:
1.超时的数据不再写入文件
忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令 如del key1,hdel key2,srem key3,set key 222等
对统一数据的多条命令合并为一条命令 如 lpush list1 a ,lpush list1 b,lpush list1 c可以转化为lpush list1 a b c
为防止数据量过大造成客户端缓冲区溢出,对list,set,hash,set等类型,每条指令最多写入64个元素
AOF重写方式:
手动重写:Bgrewriteaof (类似rdb执行一条指令就重写)
自动重写:auto-aof-rewrite-min-size size auto-aof-rewrite-percentage percentage
==========================================
RDB-AOF混合持久化
4.0开始允许使用RDB-AOF混合持久化的方式
持久化开关开启后,AOF文件的前半段为RDB文件,后半段为AOF,且文件开头带有REDIS
标签:AOF,存储,持久,Redis,RDB,save,数据 From: https://www.cnblogs.com/Joshua-BlueSky/p/16757681.html