腾讯云网站免费建设,中山 照明 骏域网站建设,深圳专业商城网站制作公司,学做简单网站视频教程一、为什么需要持久化
redis本身运行时数据保存在内存中#xff0c;如果不进行持久化#xff0c;那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然#xff0c;redis本身默认采用了一种持久化方式#xff0c;即RD…一、为什么需要持久化
redis本身运行时数据保存在内存中如果不进行持久化那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然redis本身默认采用了一种持久化方式即RDB Redis DataBase可以在redis的目录中找到dump.rdb文件这就是使用RDB方式做持久化后生成的数据文件。
二、常见的两种持久化方式
一、RDB(Redis Database)快照
1、是什么即redis数据库rdb持久性以指定的时间间隔执行数据集的时间点快照。 2、作用
在指定的时间间隔内将内存中的数据集快照写入磁盘。也就是Snapshot内存快照。等redis回复时再将硬盘快照文件直接读回到内存里。保存备份时执行的是全量快照把内存中的所有数据都保存到dump.rdb文件
3、持久化触发类型
自动触发 手动触发
Redis提供了两个命令来手动生成RDB文件
save在主进程中执行会阻塞当前redis服务器直到持久化工作完成在执行save命令期间redis不能处理其他命令线上禁止使用。
bgsaveredis会在后台异步进行快照操作不阻塞快照同时还可以响应客户端请求该触发方式会fork一个子进程由子进程复制持久化过程。
注意生产上只允许用bgsave不允许用save
lastsave获取最后一次成功执行快照的时间获取到的是时间戳在Linux中可以使用date -d 时间戳进行时间的转换
4、如何恢复
将备份文件移动到redis安装目录并启动服务即可。
注意1、执行flushall/flushdb命令也会产生dump.rdb文件但里面是空的没有任何意义。2、物理恢复服务和备份分机隔离。以防止生产机物理损坏后备份文件也挂了。
5、优劣势
优点官网 1、适合大规模数据恢复
2、按照业务定时备份
3、对数据完整性和一致性要求不高
4、RDB文件在内存中的加载速度要比AOF快得多
缺点官网 1、在一定间隔时间做一次备份如果redis意外宕机了就会丢失从当前至最近一次快照期间的数据快照之间的数据会丢失。
2、内存数据的全量同步如果数据量太大会导致I/O严重影响服务器性能
3、RDB依赖于主进程的fork在更大的数据集中这可能导致服务请求的瞬间延迟。fork的时候内存数据被克隆了一份大致两倍的膨胀需要慎重考虑。 6、使用redis -check -rdb 对损坏的rdb文件进行修复
7、RDB的触发
1、配置文件中默认的快照配置即多少时间内进行了多少次redis数据的操作触发rdb持久化机制
2、手动save/bgsave命令
3、执行flashall/flashdb命令也会产生dump.rdb文件但里面是空的无意义。
4、执行shutdown且没有设置开启aof持久化
5、主从复制时主节点自动触发
8、禁用rdb
1、redis-cli config set save 动态的所有停止rdb保存规则
2、配置文件上禁用 二、AOF(Append Only File)
一、是什么 二、能干什么
主要是记录每次redis的除读取操作外的所有操作指令AOF保存的是appendonly.aof文件
三、AOF持久化工作流程 四、AOF缓冲区三种写回策略
1、Always同步写回每个写命令执行完立刻同步地将日志写回磁盘。
2、everysec默认写回策略每秒写回每个写命令执行完只是先把日志写到aof文件的内存缓冲区每隔1秒把缓冲区中的内容写入到磁盘文件。
3、no操作系统控制的写回。每个命令执行完只是先把日志写到AOF文件的内存缓冲区由操作系统决定何时将缓冲区内容写回磁盘 五、redis7 Multi Part AOF 的设计
redis7之前AOF文件有且只有一个 redis7之后有三个文件base基本文件、incr增量文件、manifest清单文件且有一个配置目录用于和rdb区分 六、AOF异常文件修复 七、优劣势
优势 劣势
1、对于相同数据集的数据而言AOF文件要大于RDB文件且恢复速度要慢于RDB
2、AOF运行效率慢于RDB每秒同步策略效率较好不同步效率和RDB相同
八、AOF重写机制 1、是什么 启动AOF文件的内容压缩只保留可以恢复数据的最小指令集 2、两种触发机制
自动触发 手动触发 直接发送bgrewriteaof命令
重写原理 自Redis 7.0.0以来当安排AOF重写时Redis父进程会打开一个新的增量AOF文件以继续写入。子进程执行重写逻辑并生成新的基本AOF。Redis将使用一个临时清单文件来跟踪新生成的基本文件和增量文件。当它们准备好后Redis将执行原子替换操作使这个临时清单文件生效。为了避免在AOF重写重复失败和重试的情况下创建许多增量文件的问题Redis引入了AOF重写限制机制以确保失败的AOF重写以越来越慢的速度重试。 Redis会fork一个子进程所以现在我们有了一个子进程和一个父进程。 子级开始在临时文件中写入新的基本AOF。 父级打开一个新的增量AOF文件以继续写入更新。如果重写失败旧的基本文件和增量文件如果有的话加上这个新打开的增量文件代表了完整的更新数据集所以我们是安全的。 当子级完成重写基本文件时父级会得到一个信号并使用新打开的增量文件和子级生成的基本文件来构建临时清单并将其持久化。 利润现在Redis对清单文件进行原子交换以便AOF重写的结果生效。Redis还会清理旧的基本文件和任何未使用的增量文件。 总结 三、AOFRDB混合使用
一、同时开启两种持久化方式
reds默认是开启RDB持久化而不会开启AOF持久化方式如果两者同时开启redis优先加载AOF持久化。 二、redis加载顺序 当redis重启的时候会优先加载AOF文件来恢复原始的数据因为通常情况下AOF文件保存的数据集要比RDB文件保存的数据集更完整。RDB的数据不实时同时使用两者时服务器重启也只会找AOF文件。由于RDB更适合用于备份数据库(AOF在不断变化不好备份)留着RDB作为一个兜底策略。 四、纯缓存模式
redis并不做持久化只用做高速缓存禁用持久化机制可以提高性能。
1、关闭RDBsave 禁用RDB自动触发模式手动触发还是可以的
2、关闭AOFappendonly no禁用AOF写回策略手动触发还是可以的。