代码编织梦想

一、redis的持久化

    Redis的持久化是将内存的数据保存到硬盘,防止redis因进程重启导致的数据丢失。Redis有RDB和AOF两种持久化的方式。

1redis RDB持久化

    RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB的方式有手动触发和自动触发。

(1)手动触发

    命令:sava

               bgsave

    执行save命令时,会阻塞当前Redis服务器,直到RDB过程完成为止,对于内存较大的实例会造成长时间的阻塞。

    执行bgsave命令时,redis进程会执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束,阻塞只发生在fork阶段。

(2)自动触发机制

    在配置文件中使用如”save m n”,表示m秒内数据修改n次,自动触发bgsave。在执行”debug reload”命令重新加载redis,也会自动触发save操作,在执行”shutdown”命令时,没有开启AOF持久化也会自动执行bgsave。

# Redis中自动触发的配置如下
save 900 1
save 300 10
save 60 10000

(3)redis对rdb文件的处理

    保存:保存在dir配置指定的目录下,文件名通过dbfilename配置指定。

    压缩:默认采用LZF算法对生成的RDB文件做压缩处理

    校验:redis加载损坏的RDB文件时拒绝启动,可使用”redis-check-dump”工具检测RDB文件并获取对应的错误报告。

(4)RDB的优缺点

    优点:RDB是一个紧凑的二进制文件、代表redis在某个时间点上的数据快照。适用于备份、全量复制等场景。Redis加载RDB恢复数据远远快于AOF的方式。

    缺点:RDB不能做到实时持久化;老版本redis无法兼容新版本RDB。

 

2AOF持久化

     AOF持久化以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF解决了数据持久化的实时性,目前已经是redis持久化的主流方式。

(1)配置使用AOF

   使用AOF需要配置”appendonly yes”,默认不开启,AOF文件名通过”appendfilename”配置设置,默认文件名是” appendonly.aof”,保存路劲也是通过”dir”配置。

(2)AOF命令的写入

     AOF命令写入的内容直接是文本格式。AOF写入时,先将数据追加到aof_buf中,再同步到硬盘。

    文件同步:redis提供了多种AOF缓冲区同步文件策略,由参数appendfsync控制,选项如下:

        always:命令写入aof_buf后调用系统fsync操作同步到AOF文件,fsync    完成后线程返回。每次写入都要同步AOF文件,与redis高性能背道而驰。

        no: 命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同  步,同步硬盘操作由操作系统负责,通常同步周期最长30秒。当配置为no时,提升了性能,但是数据安全性无法保证。

      everysec:命令写入aof_buf后调用系统write操作,write完成后线程返回。Fsync同步文件操作命令由专门线程美妙调用一次。everysec为默认的同步策略,做到了兼顾性能和数据安全。为默认的值。

(3)AOF重写机制

    AOF重写机制是把redis内存的数据转化为写命令同步到新的AOF文件的过程,以防止AOF文件的无限增大。

  1)重写规则:

    进程内已经超时的数据不再写入文件;写入时多条命令会合并为一条;旧的AOF文件中无效的命令不再写入

  2)AOF重写触发机制

    手动触发:使用bgrewriteaof命令

    自动触发:根据”auto-aof-rewrite-min-size”和”auto-aof-rewrite-percentage”参数确定自动触发机制。

    auto-aof-rewrite-min-size:表示AOF重写时文件最小体积,默认为60M

    auto-aof-rewrite-percentage:代表当前AOF文件空间和上一次重写后AOF文件空间的比值。

3、持久化文件加载流程

(1)AOF持久化开启且存在AOF持久化文件时首先加载AOF文件

(2)AOF关闭或AOF持久化文件不存在时,加载RDB文件

(3)加载AOF/RDB文件成功后,redis启动成功

(4)AOF/RDB文件存在错误时,redis启动失败并打印错误日志。

二、redis的复制

    Redis 的主从复制实现了相同数据的多个redis副本,复制功能是redis高可用的基础。

1、主从复制的建立与查看

(1)主从复制的建立

  1)修改配置文件实现主从复制

         在配置文件中加入”slaveof {masterHost} {masterPort}”

  2)在redis启动时建立主从复制

         在启动命令后面加入:--slaveof {masterHost} {masterPort}

 # 在启动时建立主从复制
~]# redis-server --slaveof 192.168.16.129 6379

  3)通过命令建立主从复制

         登录redis执行如下命令:slaveof {masterHost} {masterPort}

# 登录redis通过命令建立主从复制
127.0.0.1:6379> SLAVEOF 192.168.16,128 6379
OK

         主从复制建立后,从节点默认使用”slave-read-only=yes”配置为只读模式,如果修改从节点的只读配置,会导致主从数据不一致。

(2)查看redis的的主从复制

         命令:127.0.0.1:6379> info replication

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.16,128
master_port:6379

(3)主从复制断开

         命令:SLAVEOF no one

# 断开当前redis的主从复制
127.0.0.1:6379> SLAVEOF no one
OK

(4)主从复制中切主操作

         命令:slave {newMasterIP} {newMmasterPort}

         主从复制切主命令同建立主从复制的命令一样,切主后从节点会清空之前所有的数据。在生产生谨慎使用。

(5)主从复制安全性

         为了提高复制的安全性,主节点会通过设置requirepass参数进行密码验证,这是所有的客户端访问必须使用auth命令进行校验。

(6)主从复制的传输延迟

         配置选项:repl-disable-tcp-nodelay

         当关闭时,主节点产生的命令及时的发送给从几点,这样会使主从延迟变小,会增加网络带宽的消耗。默认是关闭的。

         当开启时,主节点会合并较小的TCP数据包以节省带宽,默认发送时间间隔取决于linux的内核,默认40毫秒,这种配置会节省带宽但会增大主从之间的延迟。

2、主从复制的过程

(1)保存主节点信息

(2)从节点内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建议网络连接。

(3)从节点发送ping命令请求进行首次通信,ping的目的包括检测主从之间网络套接字是否可用及检测主节点当前是否可以接受处理命令。发送ping命令后,从节点没有收到主节点的pong回复或者超时,从节点会断开复制连接,下次定时任务发起时从连。

(4)权限验证

(5)同步数据集,主从复制连接正常后,如果为首次复制,主节点会吧所有的数据全部发送给从节点

(6)命令持续复制

3、主从复制的方式

(1)全量复制

         全量复制是redis最早支持的复制方式,也是主从第一次建立复制时必须经历的阶段。触发全量复制的命令是sync和psync。

(2)部分复制

         部分复制时针对全量复制的过高开销做出的一种优化措施,使用psync {runid} {offset}命令实现。Runid为从节点所复制的主节点的运行ID,offset为当前从节点已复制的数据偏移量。

(3)异步复制

         主从复制中写命令的发送过程是异步完成的;主节点自身处理完写命令后直接返回给客户端,并不等待从几点复制完成。

4 主从复制状态的维护

      主从复制建立后,主从节点都有心跳检测机制,各自模拟成对方的客户端进行通信;主节点默认每隔10秒对从节点发送ping命令,判断从节点的存活性和连接状态;从节点在主线程中每隔1秒发送”replconf ack {offset}”命令给主节点上报自身当前的复制偏移量。

                                                                           

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dayi_123/article/details/82142301

redis的持久化以及主从复制-爱代码爱编程

持久化 因为数据是存储在内存中的如果停电机器重启等数据就没了,为了使redis在重启之后仍能保证数据不丢失,需要将数据从内存中某种形式同步到硬盘中,这一过程就是持久化。 redis提供了两种持久化方式:RDB持久化和AOF持久化 RDB介绍 以snapshot快照形式, 按事先定制的策略,周期性的将数据保存至磁盘,数据文件默认为dump.rdb;

Redis主从模式的优缺点-爱代码爱编程

优点: 一个Master可以同步多个SlavesSlave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求Slave

【Redis】---Redis四种持久化方式-爱代码爱编程

持久化 一、RDB方式1.1.RDB原理(如何持久化)1.2.RDB触发方式1.3.RDB的bgsave命令执行过程1.4.RDB优缺点二、AOF方式2.1、AOF原理(如何持久化和执行过程)2.2、AOF文件重写2.4、AOF优缺点三、虚拟内存方式3.1、redis.conf配置四、diskstore方式 Redis是一个支持持久化的内存数据

redis主从配置之持久化配置-爱代码爱编程

环境描述: centos:7.6 docker:19.03.1 redis:6.0.9 对于centos怎么装docker,docker又怎么装redis镜像等等内容就不做概述了。如果还不会这个,就先去百度把这些前置技能学习下 本文并没有配置哨兵模式,且全部是在一台服务器上完成的。 以下是正文 先贴一个redis官方的配置文件,使用下面的命令

redis 重新加载_10分钟彻底理解Redis持久化和主从复制-爱代码爱编程

在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制。 图片来自 Unsplash 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢?其实,只要稍微有点计

Redis系列(三)持久化,主从复制,哨兵,集群-爱代码爱编程

Redis有两种方式进行持久化 一、RDB方式持久化 这种方式保存的是数据。 执行方法: 手动:save(已废弃)/bgsave自动:在配置文件中 save m n配置文件常用参数 RDB文件保存路径:配置文件中的dirRDB文件保存文件名:配置文件中dbfilenameRDB文件是否压缩:配置文件中rdbcompression二、AOF方式持久

redis面试:由于主从延迟导致读取到过期数据怎么处理-爱代码爱编程

读写分离,当使用从节点响应读请求时,业务端可能会遇到如下问题: 复制数据延迟读到过期数据从节点故障复制数据延迟 因为主从库间的命令复制是异步进行的,所以有可能客户端从从客户读取到的主和主库中最新值不一致。 具体来说,在主从库命令传播阶段,主库收到新的写命令后,会发生给从库。但是,主库并不会等到从库实际执行完命令后,再把结果返回给客户端。如果从库还没有

Redis 主从复制常见的一些 坑-爱代码爱编程

##读写分离的问题 数据复制的延迟 读写分离时,master会异步的将数据复制到slave,如果这时slave发生阻塞,则会延迟master主机的数据写命令,造成数据的不一致的情况 解决:可以对slave的偏移量进行将恐,如果发现某台slave的偏移量有问题,则将数据读取操作切换到master;但是会很消耗资源,所以大部分是直接不考虑这个问题

redis持久化与主从复制-爱代码爱编程

持久化 redis 的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此需要持久化来保证 redis 的数据不会因为故障而丢失,redis 重启的时候可以重新加载持久化文件来恢复数据。 redis持久化有以下4种方式: aof rdb aof rewrite aof-rdb混用 从以下方面了解redis持久化: aof与rdb比较

4.redis持久化RDB_AOF && 主从复制-爱代码爱编程

文章目录 1.Redis持久化1.1 RDB(Redis DataBase)1.1.1 定义1.1.2 备份是如何执行的1.1.3 RDB持久化流程1.1.4 dump.rbd1.1.5 自动间隔性保存1.1.6 总结1.2 AOF(Append Only File)1.2.1 定义1.2.2 持久化流程1.2.2.1 命令追加1.2.2.2 写入

Redis主从复制、持久化-爱代码爱编程

Redis主从复制 一、Redis主从复制工作原理 类似于mysql,Redis提供存储数据的服务结构,分为主/从2种角色主服务器接收客户端访问从服务器与主服务器保持数据一致支持的服务结构有:一主一从,一主多从,主从从。 1、工作原理(背诵) slave向master发送sync(同步)命令 master启动后台存盘进程,并收集所有修改数据命令 mast

Redis--- 主从复制,持久化-爱代码爱编程

主从复制 redis服务的主从复制(与mysql服务主同步的功能一样,都是实现数据自动同步的存储结构。 主服务器:接收客户端连接 从服务器:连接主服务器同步数据 主从复制结构模式: 一主一从   、 一主多从 、 主从从   redis主从复制工作过程(数据同步原理): !!!说明!!!:从服务器首次做的是全量

redis的四种方式的优缺点_redis缺点-爱代码爱编程

1.主从模式 redis单节点虽然有通过RDB和AOF持久化机制能将数据持久化到硬盘上,但数据是存储在一台服务器上的,如果服务器出现硬盘故障等问题,会导致数据不可用,而且读写无法分离,读写都在同一台服务器上,请求量大时会出现I/O瓶颈。 为了避免单点故障 和 读写不分离,Redis 提供了复制(replication)功能实现master数据库中的数据

redis主从复制配置-爱代码爱编程

1.主从复制原理   Redis 一般是使用一个 Master 节点来进行写操作,而若干个 Slave 节点进行读操作,Master 和 Slave 分别代表了一个个不同的 Redis Server 实例。 另外定期的数据备份操作也是单独选择一个 Slave 去完成,这样可以最大程度发挥 Redi

redis 持久化_redis持久层-爱代码爱编程

Redis持久化分为两种 AOF RDB: RDB: 在主从复制中rdb就是备用了 从机上面 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建 ( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上