Redis持久化,主从与哨兵架构详解

Redis-Redis持久化,主从哨兵架构详解 Redis持久化。 阅读详情

Redis持久化
RDB快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“N 秒内数据集至少有M 个改动”这一条件被满足时, 自动保存一次数据集。
比如说, 以下设置会让 Redis 在满足“60 秒内有至少有1000 个键被改动”这一条件时, 自动保存一次数据集:
#save 60 1000
关闭RDB只需要将所有的save保存策略注释掉即可
还可以手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件,每次命令执行都会将所有redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。save是同步命令,bgsave是异步命令,bgsave会从redis主进程fork(fork()是linux函数)出一个子进程专门用来生成rdb快照文件
在这里插入图片描述
AOF(append-only file)快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化,将修改的每一条指令记录进文件appendonly.aof中你可以通过修改配置文件来打开 AOF 功能:
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启动时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。你可以配置 Redis 多久才将数据 fsync 到磁盘一次。有三个选项:
appendfsync always:每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全。
appendfsync everysec:每秒 fsync 一次,足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。
appendfsync no:从不 fsync ,将数据交给操作系统来处理。更快,也更不安全的选择。推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

AOF重写
AOF文件里可能有太多没用指令,所以AOF会定期根据内存的最新数据生成aof文件例如,执行了如下几条命令

在这里插入图片描述
重写后AOF文件里变成
在这里插入图片描述
如下两个配置可以控制AOF自动重写频率
#auto-aof-rewrite-min-size 64mb //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大
#auto-aof-rewrite-percentage 100 //aof文件自上一次重写后文件大小增长了100%则再次触发重写
当然AOF还可以手动重写,进入redis客户端执行命令bgrewriteaof重写AOF注意,AOF重写redis会fork出一个子进程去做,不会对redis正常命令处理有太多影响
在这里插入图片描述
redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据,因为aof一般来说数据更全一点。

Redis 4.0 混合持久化
重启 Redis 时,我们很少使用 RDB来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志性能相对 RDB来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。 Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。
通过如下配置可以开启混合持久化:
# aof-use-rdb-preamble yes
如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不appendonly.aof,等到重写完新的AOF文件才会进行改名,原子的覆盖原有的AOF文件,完成新旧两个AOF文件的替换。于是在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的AOF 全量文件重放,因此重启效率大幅得到提升。
混合持久化AOF文件结构Redis主从架构

在这里插入图片描述

Redis主从架构
在这里插入图片描述
Redis主从工作原理
如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个SYNC命令(redis2.8版本之前的命令)给master请求复制数据。master收到SYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。当master和slave断开重连后,一般都会对整份数据进行复制。
但从redis2.8版本开始,master和slave断开重连后支持部分复制。

数据部分复制
从2.8版本开始,slave与master能够在网络连接断开重连后只进行部分数据复制。master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。

从2.8版本开始,redis改用可以支持部分数据复制的命令PSYNC去master同步数据主从复制(全量复制)流程图
在这里插入图片描述
主从复制(部分复制)流程图:
在这里插入图片描述
redis主从架构搭建,配置从节点步骤:
在这里插入图片描述
在这里插入图片描述
Jedis连接代码示例:
1、引入相关依赖:
在这里插入图片描述
访问代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管道(Pipeline)
客户端可以一次性发送多个请求而不用等待服务器的响应,待所有命令都发送完后再一次性读取服务的响应,这样可以极大的降低多条命令执行的网络传输开销,管道执行多条命令的网络开销实际上只相当于一次命令执行的网络开销。需要注意到是用pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。所以并不是打包的命令越多越好。pipeline中发送的每个command都会被server立即执行,如果执行失败,将会在此后的响应中得到信息;也就是pipeline并不是表达“所有command都一起成功”的语义,管道中前面命令失败,后面命令不会有影响,继续执行。
详细代码示例见上面jedis连接示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)
redis哨兵架构搭建步骤:
在这里插入图片描述
在这里插入图片描述
哨兵的Jedis连接代码:
在这里插入图片描述
在这里插入图片描述
哨兵的Spring Boot整合Redis连接代码见示例项目:redis-sentinel-cluster
1、引入相关依赖:
在这里插入图片描述
springboot项目核心配置:
在这里插入图片描述
访问代码:
在这里插入图片描述
在这里插入图片描述
StringRedisTemplate与RedisTemplate
spring封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用,分别是
在这里插入图片描述
RedisTemplate中定义了对5种数据结构操作
在这里插入图片描述
StringRedisTemplate继承自RedisTemplate,也一样拥有上面这些操作。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redis持久化、主从与哨兵架构详解 在默认情况下,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。你可以对Redis进行设置,让它在“N秒内数据集至少有M个改动”这一条件被满足时,自动保存一次数据集。还可以手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件,每次命令执行都会将所有redis内存快照到一个新的rdb文件里,并覆盖原有rdb快照文件。bgsave 的写时复制(COW)机制。 阅读详情

相关推荐

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

02-Redis持久化、主从与哨兵架构详解

Redis持久化、主从与哨兵架构详解

野心与梦 1万+

终端里藏了个AI大神!DeepSeek‑TUI让你的命令行直接起飞

DeepSeek-TUI:终端AI编程神器 DeepSeek-TUI是一款专为开发者设计的终端AI编程工具,基于DeepSeek V4模型,提供100万Token超大上下文支持,适合处理复杂项目。其核心优势包括: 轻量高效:单二进制文件,无需依赖环境,支持SSH远程操作 智能交互:实时流式输出推理过程,支持三档模式(Plan/Agent/YOLO)灵活切换 强大功能:集成文件读写、Git管理、Shell执行等工具,支持一键回滚和持久会话 节省成本:智能压缩与缓存优化,显著降低Token消耗 适用于服务器开发

962

【Redis专题】Redis持久化、主从与哨兵架构详解

【持久化】这个单词我想大家都不陌生吧。什么是持久化?我们知道,Redis的数据是存储在内存里面的,所以在Redis这里,其实是指把内存中的数据,通过一些策略写到磁盘中,方便因为宕机、或者重启Redis服务的时候,再次把数据加载到内存中。那么,Redis中持久化策略(方式)有哪些呢?其实主要的方式有如下三种,让我们来看看吧在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。(PS:该持久化策略,是默认的策略,当然不排除在随后的版本中改了)

qq_32681589的博客 2464

告别手动转换!用腾讯云轻量服务器+QMT插件,5分钟搞定聚宽策略实盘(附完整源码)

本文详细介绍如何利用腾讯云轻量服务器和QMT插件快速实现聚宽策略的自动化实盘部署。通过云端信号中转站解决协议转换、信号缓存等核心问题,5分钟完成服务器配置,并附完整源码实现零改造实盘方案,显著提升量化交易效率。

weixin_28707739的博客 660

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4583

Redis持久化、主从及哨兵架构详解

Redis持久化、主从及哨兵架构详解

Zhuxiaoyu_91的博客 1747

数字取证双雄:Passware Kit Forensic 与 ElcomSoft 在实战场景下的能力边界解析

本文深入解析了Passware Kit Forensic与ElcomSoft在数字取证实战中的能力边界,涵盖Windows、macOS、iOS和Android系统的密码恢复与数据提取技术。通过真实案例对比两款工具在硬件加速、分布式计算及云取证等场景下的表现差异,为取证专家提供关键决策参考。特别探讨了密码恢复软件在加密设备突破中的核心作用。

weixin_30342209的博客 399

Redis持久化机制,主从与哨兵架构详解

1. Redis持久化 1.1 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:#save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可

qq_45061342的博客 1238

01-嵌入式入门-如何看原理图

最近由于找到的工作是偏于嵌入式方向,因此又重新开始学习已经丢弃两年的知识。新手学习知识感觉有一个通病:喜欢收集各种各样的视频、资料,网盘里收藏一大堆,但是却从没有打开看过,到头来还是个小白,只听说过几个概念,而实际却是不知所云,这就是所谓的"学习综合征"。而我也是其中的一员,最近痛定思痛,就准备根据一套资料沉下心学习下去,不再进入收集资料的大军。...

weixin_34010566的博客 4484

chmod: changing permissions of `/u01/app/oracle/product/11.2.0/dbhome_1/bin/extjobO‘: Operation not

oracle 11.2.0.4安装psu 29141056,日志末尾抛出报错 Patching component oracle.ctx, 11.2.0.4.0... Applying sub-patch '29141056' to OH '/u01/app/oracle/product/11.2.0/dbhome_1' Patching component oracle.rdbms, 11.2.0.4.0... Patching component oracle.rdbms.rman, 11.2.0.

m0_37625564的博客 1833

Redis持久化主从哨兵架构详解

文章目录Redis持久化RDB快照(snapshot)AOF(append-only file)AOF重写Redis 4.0 混合持久化Redis数据备份策略:Redis主从架构Redis主从工作原理Redis哨兵高可用架构 Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb的二进制文件中。 你可以对 Redis 进行设置,让它在 “N 秒内数据集至少有 M个改动” 这一条件被满足时,自动保存一次数据集。 比如说,以下设置会让 Red

米不开朗基罗的博客 454

华为OD机试真题 新系统【Skill执行链完整性检测】

华为OD机试 新系统真题【Skill执行链完整性检测】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【Skill执行链完整性检测】

qq_45776114的博客 764

2、Redis持久化、主从与哨兵架构详解

redis缓冲区默认是1M。

tqq的博客 661

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Redis】2. Redis持久化、主从与哨兵架构详解

目录 RDB、AOF及混合持久化详解 Redis数据备份策略 Redis主从架构及原理详解 Redis哨兵高可用架构 RDB、AOF及混合持久化详解 重度依赖Redis缓存集群的架构(例如大型购物网站),当Redis集群出现事故,且没有做Redis持久化的时候,会引起“缓存雪崩”的问题。 持久化的实现:RDB、AOF及混合持久化 RDB快照(snapshot) 这种机制在redis内存比较大(例如好几个G)的情况,是很耗费时间的。且当在执行rdb的save持久化操作时,会阻塞正..

janewash的博客 2336

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Redis-持久化、主从与哨兵架构详解

Redis-持久化、主从与哨兵架构详解Redis 持久化RDB快照(snapshot)bgsave的写时复制(COW)机制save与bgsaveAOF(append-only file) 引用自图灵,用于学习 Redis 持久化 RDB快照(snapshot) 在默认情况下,Redis将内存数据库快照保存在名为dump.rdb的二进制文件中。可以对Redis进行设置,让它在“N秒内数据集至少有M个改动”这一条件被满足,自动保存一次数据集。 比如说,以下设置会让Redis在满足“60秒内至少有1000个键

yz_ylfc的博客 670

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

redis最全详解-02-Redis持久化、主从与哨兵架构详解

redis最全详解-02-Redis持久化、主从与哨兵架构详解 Redis持久化 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集: # save 60 1000 关闭RDB只需要

wangzhipeng47的博客 504

2. Redis持久化、主从哨兵架构详解

本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。课程内容:1、RDB、AOF及混合持久化详解2、并行持久化之写时复制机制详解3、Redis主从架构原理详解4、Redis管道及lua脚本详解5、Redis哨兵高可用架构详解。

俺就是菜的很的博客 1152
上一篇: Redis核心原理与数据结构
下一篇: Redis缓存高可用集群
快乐小柴
博客等级 码龄7年 4粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值