(四)持久化之---RDB持久化的配置和原理

配置过程



默认快照方式是开启的,Redis会根据快照保存策略把快照写入到dump.rdb(默认名称)文件中,该文件保存位置可以在配置文件中设置,就是dir配置项。

默认保存策略如下:

命令行有一个save或者gbsave命令,作用是把数据同步到dump.rdb中,不过这两个命令的是有区别的,在原理部分会谈到。

原理



RDB持久化可手动运行也可以自动定期执行,然后把某个时间点的数据库状态保存到RDB文件中,默认是dump.rdb,该文件是一个经过压缩的二进制文件,上面已经说了如何去配置策略和使用命令。下面来说一下save和gbsave的区别。

SAVE命令运行后会阻塞Redis服务器进程,直到RDB文件创建完毕,在阻塞过程过程中服务器不处理任何来自外界的请求无论读还是写(阻塞所有请求)。

BGSAVE命令与SAVE不同,该命令会产生一个子进程,由此子进程来处理创建RDB文件任务,而服务器的父进程继续响应外部请求。

BGSAVE在执行过程中不会阻塞请求,但是并不是说任何请求都可以被执行,在服务器执行BGSAVE期间,对于执行SAVE、BGSAVE和BGREWRITEAOF这三个命令会有所有不同。

在BGSAVE执行期间:
执行SAVE命令 会被服务器拒绝,服务器禁止SAVE命令和BGSAVE同时执行,因为不可能让两个命令去调用同一函数然后去操作同一个RDB文件
执行BGSAVE命令 会被服务器拒绝,因为已经有一个在进行了,没必要再允许一个
执行BGREWRITEAOF命令 会被延迟执行,BGSAVE子进程完成后,才会执行BGREWRITEAOF命令
在BGREWRITEAOF执行期间:
执行BGSAVE命令 会被拒绝,这两个命令没有冲突的地方,只是同时执行会产生大量磁盘写操作,会影响性能,所以这是一个规则上的拒绝,不是一个技术上的拒绝

上面提到了保存策略,那么这个保存策略是如何被执行的呢?

简单来说就是三个内容,条件、计数器与上次保存时间、检查器。检查器周期性(默认100毫秒)检测计数器与上次保存时间是否满足条件组合之一(save900  1、save 300   10、save 6010000),是则执行BGSAVE。

计数器dirty:用于记录修改次数;上次保存时间lastsave:用于保存上次保存的时间。

注意:Redis模式会运行16个数据库(编号为0---15),在执行保存的过程中无论是SAVE触发还是BGSAVE触发,都是会把所有非空数据库进行保存的。

时间: 2024-10-30 23:01:02

(四)持久化之---RDB持久化的配置和原理的相关文章

Redis AOF持久化和RDB持久化区别

一.redis持久化----两种方式 1.redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File). 2.RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上: 3.AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了. 4.其实RDB和AOF两种方式也可以同时使用,在这种情况

redis持久化策略RDB和AOF

Redis 持久化: redis 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾. Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存

(四)持久化之---AOF持久化的配置和原理

AOF持久化及AOF重写的配置: 默认AOF方式是关闭的,如下图: 如果要开启的话,就是把no改写成yes.如下图: 默认文件名称appendonly.aof,你也可以修改文件名.默认保存目录同样也是配置文件中dir配置项中的设置,它和RDB共用一个目录.如下图: 默认同步策略是每秒,如下图: 我们对数据库做一些操作然后查看一下appendonly.aof文件内容 它会记录所有写操作内容. *2 表示2个参数 $6 表示第一个参数长度为6 SELECT 第一个参数 $1 第二个参数长度为1 0

Redis持久化之rdb&aof

Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记录每一个服务器收到的写操作.数据回复时,这些记录的操作会逐条执行从而重建出原来的数据.写操作命令  记录的格式跟Redis协议一致,以追加的方式进行保存. Redis的持久化是可以禁用的,两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据. 一.RDB RDB就

【Redis源码剖析】 - Redis持久化之RDB

原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51553370 Redis是一个高效的内存数据库,所有的数据都存放在内存中.我们知道,内存中的信息会随着进程的退出或机器的宕机而消失.为此,Redis提供了两种持久化机制:RDB和AOF.这两种持久化方式的原理实际上就是把内存中所有数据的快照保存到磁盘文件上,以避免数据丢失. 今天我们主要来介绍一下RDB持久化机制RDB的实现原理,涉及的文件为rdb.h和rdb.c. RDB的主

redis配置文件基本解析以及RDB持久化与AOF持久化

redis.conf 我们安装成功之后就会有这个配置文件,但是我们一般都不推荐直接使用出厂的配置文件,而是单独拷贝一份使用,以避免我们因为配置错误而带来不必要的麻烦. 如图我单独拷贝了一份在根目录下面的文件夹: redis单元: Tcp-backlog: 设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列+已经完成三次握手队列. 在这里三次握手队列我参考另一篇博文:https://blog.csdn.net/ityouknow/article

Redis两种持久化方式(RDB&AOF)

爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Redis并发锁 windows下redis基础操作与主从复制 从而 数据备份和读写分离 Redis两种持久化方式(RDB&AOF) Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就

redis之RDB持久化

Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见.为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失.

Redis RDB持久化异常

导致异常情况: 1.三个redis节点数据 无法rdb持久化 2.redis数据 只能读不能写入(有问题1导致),结果直接导致数据无法新增和更新 目前临时处理方式: 1. config set stop-writes-on-bgsave-error no   先让数据可以写redis,不影响线上数据的读写操作 2.调整  vm.overcommit_memory = 2 ,这个配置目前没有效果,因为redis主进程内存使用量已经较高 0 直接和空闲物理内存对比,足够就放行 1 直接放行 2 物理