TongRDS分布式内存数据缓存中间件

命令

优势

支持高达10亿级的数据缓冲,内存优化管理,避免GC性能劣化
高并发系统设计,可充分利用多CPU资源实现并行处理。
数据采用key-value多索引方式存储,字段类型和长度可配置。
支持多台服务并行运行,服务之间可互为主备,实现负载分担。
数据同步采用独立队列,同步异常不影响主业务。
支持数据有效期设置,过期数据自动回收。
服务重启时可从其他服务获取在线数据,单台服务故障不影响整个系统

中心和服务节点区别

主从模式

主节点(master)负责数据写入,从节点(slave)数据读取和备份.
若主节点发生故障,需人工介入,将某个从节点提升为新的主节点,无法实现高度自动化。

主从模式特点:

主从关系的配置:一个主库对应多个从库,一个从库对应一个主库
从库的容错能力:从库故障,对系统其他部分的影响小。即使在从库宕机的情况下,其他从库仍可提供读服务,主库也能继续正常的读写操作。故障的从库在恢复后,能自动从主库同步缺失数据。
主库故障的影响:主库故障可能导致Redis暂停处理新的写请求,但已连接的从库可继续提供读服务。主库恢复后,Redis将重新提供完整的读写服务。
应对主库故障的机制:在当前主库故障时,系统不会自动在从库中选举新的主库。这需要借助额外的高可用性解决方案,例如Redis Sentinel或Redis Cluster,来管理主库的选举和故障转移

复制原理:异步复制,不能完全保证主从数据的一致性。
第一次启动:在从库第一次连接到主库时,将采用psync复制方式进行全量复制。这意味着从库会从头开始复制主库中的全部数据。
正常运行期间:在正常运行状态下,从库通过读取主库的缓冲区来进行增量复制。这个过程涉及复制主库上发生的新的数据变更。
从库第二次启动(主库缓冲区未溢出) :当从库重新启动且主库的缓冲区未溢出时,将通过读取主库的缓冲区进行部分复制。这种方式能够快速同步中断期间发生的数据变更,而不会对主库造成重大影响。
Redis 2.8及以上版本的从库第二次启动(针对主库) :当从库第二次启动且系统版本为Redis 2.8或以上时,将采用psync复制进行全量复制。这种情况通常发生在主库的缓冲区数据无法满足从库需要同步的数据量

哨兵模式

哨兵模式主要通过后台监控机制来确保Redis服务的稳定性。


在这一模式中,哨兵负责实时监控主节点的运行状况。一旦主节点出现故障,哨兵将基于预设的投票机制自动将某个从节点晋升为新的主节点,以保持服务的连续性和数据的可用性。

优势:继承了主从复制的所有优势,自动实现从切换和故障转移,即使主节点发生故障,系统也能迅速自动切换到备用节点,确保服务的连续性和可用性。

劣势:在线扩容方面,当集群容量接近或达到上限时候,扩容操作复杂

(redis2.8及后续版本,官方引入了Sentinel(哨兵)架构)

Cluster模式

定义:每个从节点都复制主节点的数据,但不直接参与读写操作,主要用于数据备份和故障恢复。
这种架构使得每个节点都可以在需要时承担主节点的角色,从而提高了整体系统的可靠性和容错能力。
支持更大规模的数据存储和管理

PSYNC

启动或重连判断:当从节点(Slave)启动或与主节点(Master)的连接断开后重连时,从节点需要确定是否曾经同步过。
如果从节点没有保存任何主节点的运行ID(runid),它将视为第一次连接到主节点。


第一次同步处理:在第一次同步的情况下,从节点会发送 PSYNC -1 命令给主节点,请求进行全量数据同步。
全量同步是指主节点将其所有数据完整地复制一份给从节点。


断线重连处理:对于之前已经同步过的从节点,它会发送 PSYNC runid offset 命令,其中runid是主节点的唯一标识符,offset是从节点上次同步数据的偏移量。


主节点的响应:主节点接收到PSYNC命令后,会检查runid是否匹配,以及offset是否在复制积压缓冲区的范围内。


如果匹配且offset有效,主节点将回复CONTINUE,并发送自从节点上次断开连接以来的所有写命令。
全量同步触发条件:如果runid不匹配,或offset超出了积压缓冲区的范围,主节点将通知从节点执行全量同步,回复FULLRESYNC runid offset。


复制积压缓冲区的作用:主节点会在处理写命令的同时,将这些命令存入复制积压队列,同时记录队列中存放命令的全局offset。


当从节点断线重连,且条件允许时,它可以通过offset从积压队列中进行增量复制,而不是全量复制。
数据一致性保障:PSYNC机制允许从节点在网络不稳或其他意外断开连接的情况下,能够以增量方式重新同步数据,保持主从节点数据的一致性。


PS:判断是否进行全量同步,需要考虑两个关键因素:首先,确认这是否是第一次进行数据同步;其次,检查缓存区是否已经达到或超过其容量上限。只有在是第一次同步,或者缓存区已溢出的情况下,才会执行全量同步。

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

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

相关文章

项目整合logback日志打印线程id

项目打印日志能帮助我们解决很多的问题&#xff0c;提示我们出现的问题&#xff0c;通过日志我们可以准确的定位问题快速找到问题点解决问题。 <?xml version"1.0" encoding"UTF-8"?> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO &l…

Flutter-Web打包后上线白屏

问题描述 Flutter上线后进行测试发现界面白屏&#xff0c;打开开发者模式查看网络发现加载main.js文件404 问题原因 我上线的地址是https://xxx:8091/homedots,但是我打包后的index文件中的baseUrl是"/",将地址改成”/homedots/"&#xff0c;注意homedots后面…

算法训练营day22(二叉树08:二叉搜索树的最近公共祖先,插入,删除)

第六章 二叉树part08 今日内容&#xff1a; ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点 详细布置 235. 二叉搜索树的最近公共祖先 相对于 二叉树的最近公共祖先 本题就简单一些了&#xff0c;因为 可以利用二叉搜索树的…

Rust循环引用与多线程并发

循环引用与自引用 循环引用的概念 循环引用指的是两个或多个对象之间相互持有对方的引用。在 Rust 中&#xff0c;由于所有权和生命周期的严格约束&#xff0c;直接创建循环引用通常会导致编译失败。例如&#xff1a; // 错误的循环引用示例 struct Node {next: Option<B…

ambari metrics单机模式改成集群模式

最近碰到了ambari平台ambari metrics相关的lib较大&#xff0c;导致系统盘使用率较高。今天对这个组件进行转移到其他磁盘使用率低的服务器上&#xff0c;在安装好metrice collector组件后&#xff0c;发现启动时一直报如下错误。 通过报错可以定位到&#xff0c;该组件的模式是…

前端 递归优化

在前端开发中&#xff0c;递归是一种常见的编程技巧&#xff0c;但它也可能带来性能问题&#xff0c;特别是当递归深度很深或递归调用非常频繁时。以下是一些优化递归的方法&#xff1a; 1. 尾递归优化 尾递归是指递归调用是函数中的最后一个操作&#xff0c;没有额外的计算。…

Python 面向对象编程详解

Python 面向对象编程详解 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。在 Python 中&#xff0c;面向对象编程非常强大&#xff0c;允许开发者通过类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;来模…

langchain实现基于sql的问答

1. 数据准备 import requestsurl "https://storage.googleapis.com/benchmarks-artifacts/chinook/Chinook.db"response requests.get(url)if response.status_code 200:# Open a local file in binary write modewith open("Chinook.db", "wb&qu…

pip更换国内源,加速Python包下载(附2024年12月最新国内镜像源列表)

pip是什么 pip 是 Python 包管理工具&#xff0c;它允许用户从 Python 包索引&#xff08;PyPI&#xff09;安装和管理软件包。pip 是 Python 的官方包安装程序&#xff0c;它提供了一个命令行界面&#xff0c;用户可以通过它来安装、卸载、查看和管理 Python 包。以下是 pip …

安全关系型数据库查询新选择:Rust 语言的 rust-query 库深度解析

在当今这个数据驱动的时代&#xff0c;数据库作为信息存储和检索的核心组件&#xff0c;其重要性不言而喻。然而&#xff0c;对于开发者而言&#xff0c;如何在保证数据安全的前提下&#xff0c;高效地进行数据库操作却是一项挑战。传统的 SQL 查询虽然强大&#xff0c;但存在诸…

linux-10 关于shell(九)认证、授权、审计

之前提到过的一些基本应用&#xff0c;对Linux系统而言&#xff0c;安装完成以后&#xff0c;它给我们提供一个登录界面&#xff0c;对吧&#xff1f;这个登录界面说白了就是验证用户的&#xff0c;身份的&#xff0c;我昨天提到过&#xff0c;一般而言&#xff0c;每一个使用者…

VSCode中“Run Code”运行程序时,终端出现中文乱码解决方法

问题描述 在VSCode中“Run Code”运行程序时&#xff0c;终端输出结果出现中文乱码现象&#xff1a; 解决方法 1. 检查系统cmd的默认编码 查看Windows终端当前编码方式的命令&#xff1a; chcp输出结果是一段数字代码&#xff0c;如936&#xff0c;这说明当前的cmd编码方式…

【Python】ASCII-generator 将图像、文本或视频转换为 ASCII 艺术 生成字符图(测试代码)

目录 预览效果安装环境报错分析基本例程总结 欢迎关注 『Python』 系列&#xff0c;持续更新中 欢迎关注 『Python』 系列&#xff0c;持续更新中 预览效果 原图 黑白图 彩色图 安装环境 拉取代码 https://github.com/vietnh1009/ASCII-generatorpython3.8 pip install…

量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于发明者FMZ平台介绍。 发明…

Qt桌面应用开发 第十天(综合项目二 翻金币)

目录 1.主场景搭建 1.1重载绘制事件&#xff0c;绘制背景图和标题图片 1.2设置窗口标题&#xff0c;大小&#xff0c;图片 1.3退出按钮对应关闭窗口&#xff0c;连接信号 2.开始按钮创建 2.1封装MyPushButton类 2.2加载按钮上的图片 3.开始按钮跳跃效果 3.1按钮向上跳…

【maven-4】IDEA 配置本地 Maven 及如何使用 Maven 创建 Java 工程

IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;是一款功能强大的集成开发环境&#xff0c;广泛应用于 Java 开发。下面将详细介绍如何在 IDEA 中配置本地 Maven&#xff0c;并创建一个 Maven Java 工程&#xff0c;快速上手并高效使用 Maven 进行 Java 开发。 1. Maven …

详细了解索引规约

索引规约 在大厂中数据量非常庞大&#xff0c;也有很多高并发场景&#xff0c;因此在大厂中使用索引规约主要是为了规范索引的创建、使用及管理&#xff0c;确保数据库性能的高效与稳定&#xff0c;避免因随意或不合理创建索引带来诸如占用过多存储资源、影响数据更新效率等问…

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出&#xff0c;因此&#xff0c;再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长&#xff0c;现在只给出一部分&#xff0c;需要自己再补充另一部分。之前的为&#xff1a; 感谢郭师兄的指导&#xff08;https://blo…

vue3图片报错转换为空白不显示的方法

vue3图片报错转换为空白不显示的方法 直接上代码&#xff1a; <el-table-column label"领料人" align"center"><template #default"scope"><el-imagev-if"scope.row.receiver":src"scope.row.receiver"style…

在OpenHarmony系统下开发支持Android应用的双框架系统

在 OpenHarmony 系统下开发支持 Android 应用的双框架系统&#xff0c;主要的目标是实现 OpenHarmony 本身作为底层操作系统&#xff0c;并通过兼容层或者桥接技术&#xff0c;允许 Android 应用在其上运行。双框架系统的架构设计会涉及到 OpenHarmony 和 Android 的结合&#…