永嘉高端网站建设价格,怎么建设银行网站打不开,资产管理系统源码,shopnc本地生活o2o网站系统首先我们要知道什么是持久化#xff1a;持久化是指将数据保存到磁盘上#xff0c;以确保在Redis服务器重启时数据不会丢失。
Redis支持两种主要的持久化方式#xff1a;RDB持久化和AOF持久化
下面让我依次给你介绍一下#xff1a;
RDB持久化
作用
这是将Redis数据保存…首先我们要知道什么是持久化持久化是指将数据保存到磁盘上以确保在Redis服务器重启时数据不会丢失。
Redis支持两种主要的持久化方式RDB持久化和AOF持久化
下面让我依次给你介绍一下
RDB持久化
作用
这是将Redis数据保存到磁盘的一种方式RDB持久化通过在指定时间间隔内将数据集快照写入磁盘中。这样一来即使故障宕机快照文件也不会丢失数据的可靠性也就得到了保证. 这个快照文件就称为RDB文件(dump.rdb)其中RDB就是Redis DataBase的缩写。
案例演示
自动触发
在我们Redis7中 我们可以看到执行的RDB条件
在1600秒内如果有至少1个键被修改则执行快照
在300秒内如果有至少10个键被修改则执行快照
在60秒内如果有至少10000个键被修改则执行快照
这个条件对于我们演示案例过于苛刻所以我们修改成5秒2次修改 修改文件保存路径 现在我们在5秒内修改两个数据 当我们超过5秒添加两个数据 恢复文件
备份成功后故意用flushdb清空redis看看是否可以恢复数据 结论执行flushall/flushdb命令也会产生dump.rdb文件但里面是空的无意义 手动触发
为什么需要手动触发呢因为实际生产中需要某个时刻添加一个在重要数据需要立刻保存就需要手动触发了。
Redis提供了两个命令来生成RDB文件分别是save和bgsave
我们可以看一下官方文档 Save在主程序中执行会阻塞当前redis服务器直到持久化工作完成执行save命令今期间Redis不能处理其他命令线上禁止使用 bgsave
Redis会在后台异步进行快照操作不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程
官方说明 Redis会使用bgsave对当前内存中的所有数据做快照这个操作是子进程在后台完成的这就允许主进程同时可以修改数据
其fork就是在Linux程序中fork()会产生一个和父进程完全相同的子进程但子进程在此后多会exec系统调用出于效率考虑尽量避免膨胀。 我们可以通过lastsave获取最后一次成功获取快照的时间 RDB优点
官网说明 总结
适合大规模的数据恢复按照业务定时备份对数据完整性和一致性要求不高RDB文件在内存中的加载速度要比AOF快很多
RDB缺点
官网说明 总结
在一定间隔时间做一次备份所以如果redis意外down掉的话就会丢失从当前至最近一次快照期间的数据快照之间的数据会丢失内存数据的全量同步如果数据量太大会导致I/0严重影响服务器性能RDB依赖于主进程的fork在更大的数据集中这可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份大致2倍的膨胀性需要考虑
检查修复durp.rdb文件 哪些情况会触发RDB拍照
配置文件中的默认的拍照配置手动save/bgsave执行flushall/flushdb命令也会产生dump.rdb文件但里面是空的无意义执行shutdown且没有设置开启AOF持久化主从复制时主节点自动触发
如何禁用快照
动态所有停止RDB保存规则的方法: redis-cli config set save
修改配置 AOF持久化
官网介绍 说明
以日志的形式来记录每一个写的操作将Redis执行过的所有写指令记录下来(读操作不记录)只许追加文件但不可以改写文件redis启动之初会读取该文件重新构建数据换言之redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
默认情况下redis是没有开启AOF(append only file)的。开启AOF功能需要设置配置: appendonly yes
工作流程 1 Client作为命令的来源会有多个源头以及源源不断的请求命令。 2 在这些命令到达Redis Server 以后并不是直接写入AOF文件会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域存在的目的是当这些命令达到一定量以后再写入磁盘避免频繁的磁盘IO操作。 3 AOF缓冲会根据AOF缓冲区 同步文件的三种写回策略将命令写入磁盘上的AOF文件。 4 随着写入AOF内容的增加为避免文件膨胀会根据规则进行命令的合并(又称 AOF重写)从而起到AOF文件压缩的目的。 5 当Redis Server 服务器重启的时候会从AOF文件载入数据。
三种写回策略 Always同步写回每一个命令执行完立刻同步的将日志写回磁盘everysec每秒写回每个写命令执行完只是先把日志写到AOF文件的内存缓冲区每隔1秒把缓冲区中的内容写入磁盘no操作系统控制的写回每个写命令执行完只是先把日志写到AOF文件的内存缓冲区由操作系统决定何时将缓冲区内容写回磁盘 案例演示
开启AOF AOF文件保存路径
在redis7之前AOF保存文件的位置和RDB保存文件的位置一样都是通过redis.conf配置文件的 dir 配置
在redis7之后AOF文件保存路径变成了dirrdb保存路径appenddirname AOF文件保存名称
在redis7之前 在redis7之后
官方说明 在Redis7之后将一个AOF文件差分为三个文件base基本文件、incr增量文件、manifest清单文件
文件恢复
正常恢复
写操作继续生成的AOF文件到指定的目录 恢复重启redis然后重新加载 异常恢复 故意乱写正常的AOF文件模拟网络闪断文件写error修改appendonly.aof.1.incr.aof文件 此时我们启动redis发现根本启动不了一点 使用异常修复命令redis-check-aof --fix 成功修复
AOF优缺点
优点
官方解释 概括更好的保护数据不丢失、性能高、可做紧急恢复
缺点
官方解释 概括
相同数据集的数据而言AOF文件要远大于RDB文件恢复速度慢于RDBAOF运行效率低于RDB每秒同步策略效率较好不同步频率和RDB相同
AOF重写机制
一句话启动AOF文件的内容压缩只保留可以恢复数据的最小指令集。由于AOF持久化是Redis不断将写命令记录到 AOF 文件中随着Redis不断的进行AOF 的文件会越来越大文件越大占用服务器内存越大以及 AOF 恢复要求时间越长。
为了解决这个问题Redis新增了重写机制当AOF文件的大小超过所设定的峰值时Redis就会自动启动AOF文件的内容压缩
只保留可以恢复数据的最小指令集或者可以手动使用命令 bgrewriteaof 来重新。
案例演示
需求说明
启动AOF文件的内容压缩只保留可以恢复数据的最小指令集。 举个例子比如有个key
一开始你 set k1 v1
然后改成 set k1 v2
最后改成 set k1 v3
如果不重写那么这3条语句都在aof文件中内容占空间不说启动的时候都要执行一遍共计3条命令
但是我们实际效果只需要set k1 v3这一条所以
开启重写后只需要保存set k1 v3就可以了只需要保留最后一次修改值相当于给AOF文件瘦身减肥性能更好。
AOF重写不仅降低了文件的占用空间同时更小的AOF也可以更快地被Redis加载。
前期准备
开启AOF
为了演示我们将自动触发调小
关闭融合
自动触发
对同一个k不断地赋值 当我们的内存到了1k的时候触发重写 手动触发
客户端向服务器发送bgrewriteaof 重写原理
1在重写开始前redis会创建一个“重写子进程”这个子进程会读取现有的AOF文件并将其包含的指令进行分析压缩并写入到一个临时文件中。
2与此同时主进程会将新接收到的写指令一边累积到内存缓冲区中一边继续写入到原有的AOF文件中这样做是保证原有的AOF文件的可用性避免在重写过程中出现意外。
3当“重写子进程”完成重写工作后它会给父进程发一个信号父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中
4当追加结束后redis就会用新AOF文件来代替旧AOF文件之后再有新的写指令就都会追加到新的AOF文件中
5重写aof文件的操作并没有读取旧的aof文件而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件这点和快照有点类似
AOF优化配置项详解 RDB-AOF混合持久化
官网说明 数据恢复顺序和加载流程
在同时开启RDB和AOF的时候重启只会加载AOF文件不会加载RDB文件 对比
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以edis协议追加保存每次写的操作到文件未尾
同时开启两种持久化方式
在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
RDB的数据不实时同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?
作者建议不要因为RDB更适合用于备份数据库(AOF在不断变化不好备份)留着rdb作为一个万一的手段
推荐开启混合模式
开启之后
先使用RDB进行快照存储然后使用AOF持久化记录所有的写操作当重写策略满足或手动触发重写的时候将最新的数据存储为新的RDB记录。这样的话重启服务的时候会从RDB和AOF两部分恢复数据既保证了数据完整性又提高了恢复数据的性能。简单来说混合持久化方式产生的文件一部分是RDB格式一部分是AOF格式。----》AOF包括了RDB头部AOF混写
纯缓存模式
同时关闭RDBAOF
禁用RDBsave
禁用AOFappendonly no