redis数据安全(四)复制

news2024/11/28 19:02:18

关系数据库通常会使用一个主服务器向多个从服务器发送更新,并使用从服务器来处理所有读请求,Redis也采用了同样的方法来实现自己的复制特性,并将其用做扩展性能的一种手段。

一、特点:

1、异步复制:Redis默认使用的是异步复制,其特点低延迟和高性能,是绝大多数Redis用例的自然复制模式。从Redis服务器会异步的确认其从主服务器周期接收到的数据量。客户端可以使用WAIT命令来请求同步复制特定的数据。

2、一个master可以有多个slave;slave可以接受其它salve的链接。除了多个slave可以连接到同一个master外,slave之间也可以像层叠状的结构连接到其它slave。

3、非阻塞复制:Redis复制在master是非阻塞的。这意味着master在一个或多个slave进行初次同步或者部分重同步时,可以继续处理查询请求;复制在slave大部分也是非阻塞的。当slave进行初次同步时,它可以使用旧数据集处理查询请求,需要在redis.conf中配置。也可以配置如果复制流断开,Redis slave会返回一个error给客户端。但是在初次同步之后,旧的数据集必须被删除,同时加载新的数据集。

4、可以使用复制来避免master将全部数据集写入磁盘造成的开销:一种典型的技术时配置你的master Redis.conf以避免对磁盘进行持久化,然后连接一个slave,其配置为不定期保存或启用AOF。注意:这个设置需要小心处理,因为重新启动master程序将从一个空数据集开始:如果一个slave视图与它同步,那么这个slave也会被清空。

5、原理:master启动会生成一个run id,首次同步时会发送给slave,slave同步命令会带上run id以及offset,显然,slave启动(初次,重启)内存中没有run id,所以master收到后会全量同步,发生网络抖动时,slave发生的同步命令会带上run id以及offset,master就知道去缓存中对应的偏移量开始到结尾那一段的命令发送给slave进行增量同步。在正常运行过程中,master每收到一个数据变更命令都会发送到所有slave上。

二、主从复制流程:

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

1、全量同步:Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 

(1)从服务器连接或者重连接主服务器,发送SYNC命令; 

(2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 

(3)主服务器BGSAVE执行完后,向所有从服务器(之所以是向所有从服务器发送应该是因为初始化是几乎同时收到SYNC命令,归根到底是向所有发送了SYNC命令的slave发送RDB文件,master不会重复生成rdb这个动作,因为bgsave和bgrewriteaof不会同时执行,如果执行bgsave发现有子进程在执行bgsave,则会立即返回)发送快照文件,并在发送期间继续用缓存区记录被执行的写命令; 

(4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 这里注意,从服务器在与主服务器进行初始连接时,数据库中原有的所有数据都将丢失,并被替换成主服务器发来的数据。

(5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 

(6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令; 

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

2、增量同步:Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程,同时记入缓存中,如果slave临时掉线了,接上来后可以同步这段时间的数据。 

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

注意:Redis不支持主主复制。

三、主从链:从服务器也可以拥有自己的从服务器,形成主从链。

四、更换故障主服务器:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Liunx:线程

我们先说一个程序是怎么执行的: 我们编写好一个代码,经过预编译,编译,汇编,连接,形成一个二进制文件被写进磁盘中,通常我们把他叫做可执行程序。 我们可以双击运行,运行需要经过几个…

Modern C++ std::mutex底层原理

前言 我时常有这样的疑问: std::mutex怎么就能保证后面的语句100%安全哪?CPU reordering就不会把这些语句重排到mutex前面执行?而且各个CPU都是有L1、L2缓存的,如果mutex后面要访问的的变量在这些缓存中怎么办? 带着…

sqlilabs第五十七五十八关

Less-57(GET - challenge - Union- 14 queries allowed -Variation 4) 手工注入 Less-58(GET - challenge - Double Query- 5 queries allowed -Variation 1) 手工注入 报错注入就可以(布尔注入的话次数不够)(所以我们前面需要做够足够的数据支持) 最后…

whistle代理+mock轻松解决“页面端“测试接口没数据难题

0、whistle是什么?怎么用? 自行百度,此处不再赘述! 1、示例演示(交易订单测试) 背景和痛点最近在测试一个小需求,需要涉及订单侧服务商品库侧服务库存侧服务财务侧线下交易服务。痛点主要在订…

abap 将xstring转换成PDF展示

收到外围系统的xstring之后,如何在sap中将其打开呢 1.创建一个屏幕 2.绘制一个customer control 3.创建流逻辑 4.流逻辑如下: DATA: go_html_container TYPE REF TO cl_gui_custom_container, go_html_control TYPE REF TO cl_gui_html_viewer, lv_u…

66.Go从零搭建一个orm框架【简版】

文章目录 一:前置学习1、 为什么要用orm2、Golang里面是如何原生连接MySQL的3、ORM框架构想 二: 开始造1、连接Connect2、设置/读取表名Table/GetTable3、新增/替换Insert/Replace4、条件Where5、条件OrWhere6、删除Delete7、修改Update8、查询9、设置查询字段Field…

序列到序列模型

一.序列到序列模型的简介 序列到序列(Sequence-to-Sequence,Seq2Seq)模型是一类用于处理序列数据的深度学习模型。该模型最初被设计用于机器翻译,但后来在各种自然语言处理和其他领域的任务中得到了广泛应用。 Seq2Seq模型的核…

介绍下Redis?Redis有哪些数据类型?

一、Redis介绍 Redis全称(Remote Dictionary Server)本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性…

Spring框架的背景学习

Spring 的前世今生 相信经历过不使用框架开发 Web 项目的 70 后、80 后都会有如此感触,如今的程序员开发项目太轻松了,基本只需要关心业务如何实现,通用技术问题只需要集成框架便可。早在 2007 年,一个基于 Java语言的开源框架正…

Python环境下基于自适应滤波器的音频信号(wav格式)降噪方法

Python的集成环境我一般使用的是Winpython,Winpytho脱胎于pythonxy,面向科学计算,兼顾数据分析与挖掘;Anaconda主要面向数据分析与挖掘方面,在大数据处理方面有自己特色的一些包;Winpytho强调便携性&#x…

Python Tkinter Grid布局管理器用法

很多时候 Tkinter 界面编程都会优先考虑使用 Pack 布局,但实际上 Tkinter 后来引入的 Grid 布局不仅简单易用,而且管理组件也非常方便。 Grid 把组件空间分解成一个网格进行维护,即按照行、列的方式排列组件,组件位置由其所在的行…

MySQL、Oracle 生成随机ID、随机数、随机字符串

目录 1 MySQL 生成随机ID1.1 生成 唯一的随机ID:UUID()1.2 生成随机数:RAND()1.2.1 RAND():返回一个介于0和1之间的随机浮点数1.2.2 FLOOR(RAND() * 100):返回一个介于0和99之间的随机整数1.2.3 LPAD(FLOOR(RAND() * 99999999), 8…

行为型设计模式——中介者模式

中介者模式 中介者模式主要是将关联关系由一个中介者类统一管理维护,一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即…

【上分日记】第380场周赛(数位dp+ KMP + 位运算 + 二分 + 双指针 )

文章目录 前言正文1.3005. 最大频率元素计数2.3007.价值和小于等于 K 的最大数字3.3008. 找出数组中的美丽下标 II 总结尾序 前言 本场周赛,博主也只写出两道题(前两道, hhh菜鸡勿喷),第三道涉及位运算 ,数位dp,第四道涉及KMP。 下…

c语言[]优先级大于*优先级

本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时&#xff0c;a1与[]号结合后&#xff0c;谁的优先级更高&#xff0c;是本博文探讨的话题 博文来源 想要看看*与[]谁的优先级更高 博文代码 #include<stdio.h> #include<stdlib.h> int main(…

OAuth 2.0 - 微信登录

一、概述 1、什么是OAuth 2.0 OAuth (Open Authorization) 是一个关于授权 (athorization) 的开放网络标准。 允许用户授权第三应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方。OAuth在全世界得到广泛应用&#xff0c;目前的版本…

R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_orig_ext (data, rank, temporal_extent…

核对表:基本数据类型CHECKLIST:Fundmental Data

核对表&#xff1a;基本数据类型CHECKLIST:Fundmental Data 数值概论 代码中避免使用神秘数值吗&#xff1f; 代码考虑了除零错误吗&#xff1f; 类型转换很明显吗&#xff1f; 如果在一条语句中存在两个不同类型的变量&#xff0c;那么这条语句会像你期望的那样求值吗&#x…

JMeter 相关的面试题

1、什么是 JMeter&#xff1f; 它是一个开源的负载和性能测试工具&#xff0c;用于对软件、Web应用程序、API、数据库等进行压力测试。 2、JMeter 的优势是什么&#xff1f; JMeter具有以下优势&#xff1a; 开源免费&#xff1a;JMeter是开源工具&#xff0c;无需付费使用。…

使用 Elasticsearch 和 LlamaIndex 进行高级文本检索:句子窗口检索

2023 年是检索增强生成 (RAG) 的一年&#xff0c;人们探索了许多用例&#xff0c;并使用该技术开发了数百种产品。 从 Q/A 聊天机器人到基于上下文的代理&#xff0c;RAG 的使用一直是 LLM 申请快速增长的主要因素。 支持不断发展的社区以及 Langchain 和 LlamaIndex 等强大框架…