当前位置: 首页 > news >正文

Redisson—独立节点模式和集群管理工具

一、集群管理工具

Redisson集群管理工具提供了通过程序化的方式,像redis-trib.rb脚本一样方便地管理Redis集群的工具。

1、 创建集群

以下范例展示了如何创建三主三从的Redis集群。

ClusterNodes clusterNodes = ClusterNodes.create()
.master("127.0.0.1:7000").withSlaves("127.0.0.1:7001", "127.0.0.1:7002")
.master("127.0.0.1:7003").withSlaves("127.0.0.1:7004")
.master("127.0.0.1:7005");
ClusterManagementTool.createCluster(clusterNodes);

主节点127.0.0.1:7000的从节点有127.0.0.1:7001和127.0.0.1:7002。

主节点127.0.0.1:7003的从节点是127.0.0.1:7004。

主节点127.0.0.1:7005没有从节点。

2、踢出节点

以下范例展示了如何将一个节点踢出集群。

ClusterManagementTool.removeNode("127.0.0.1:7000", "127.0.0.1:7002");
// 或
redisson.getClusterNodesGroup().removeNode("127.0.0.1:7002");

将从节点127.0.0.1:7002从其主节点127.0.0.1:7000里踢出。

3、 数据槽迁移

以下范例展示了如何将数据槽在集群的主节点之间迁移。

ClusterManagementTool.moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);
// 或
redisson.getClusterNodesGroup().moveSlots("127.0.0.1:7000", "127.0.0.1:7002", 23, 419, 4712, 8490);

将番号为23,419,4712和8490的数据槽从127.0.0.1:7002节点迁移至127.0.0.1:7000节点。

以下范例展示了如何将一个范围的数据槽在集群的主节点之间迁移。

ClusterManagementTool.moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);
// 或
redisson.getClusterNodesGroup().moveSlotsRange("127.0.0.1:7000", "127.0.0.1:7002", 51, 9811);

将番号范围在[51, 9811](含)之间的数据槽从127.0.0.1:7002节点移动到127.0.0.1:7000节点。

4 、添加从节点

以下范例展示了如何向集群中添加从节点。

ClusterManagementTool.addSlaveNode("127.0.0.1:7000", "127.0.0.1:7003");
// 或
redisson.getClusterNodesGroup().addSlaveNode("127.0.0.1:7003");

将127.0.0.1:7003作为从节点添加至127.0.0.1:7000所在的集群里。

5、 添加主节点

以下范例展示了如何向集群中添加主节点。

ClusterManagementTool.addMasterNode("127.0.0.1:7000", "127.0.0.1:7004");
// 或
redisson.getClusterNodesGroup().addMasterNode("127.0.0.1:7004");

将127.0.0.1:7004作为主节点添加至127.0.0.1:7000所在的集群里。 Adds master node 127.0.0.1:7004 to cluster where 127.0.0.1:7000 participate in

二、独立节点模式

1、 概述

Redisson Node指的是Redisson在分布式运算环境中作为独立节点运行的一种模式。Redisson Node的功能可以用来执行通过分布式执行服务或分布式调度执行服务发送的远程任务,也可以用来为分布式远程服务提供远端服务。 所有这些功能全部包含在一个JAR包里,您可以从这里下载

2、配置方法

2.1. 配置参数

Redisson Node采用的是与Redisson框架同样的配置方法,并同时还增加了以下几个专用参数。值得注意的是ExecutorService使用的线程数量可以通过threads参数来设定。

mapReduceWorkers (MapReduce的工作者数量)

默认值:0 用来指定执行MapReduce任务的工作者的数量 0 代表当前CPU核的数量

executorServiceWorkers(执行服务的工作者数量)

默认值:null 用一个Map结构来指定某个服务的工作者数量,Map的Key是服务名称,用value指定数量。

redissonNodeInitializer(初始化监听器)

默认值:null

Redisson Node启动完成后调用的初始化监听器。

2.2. 通过JSON和YAML配置文件配置独立节点

以下是JSON格式的配置文件范例,该范例是在集群模式配置方法基础上,增加了Redisson Node的配置参数。

{"clusterServersConfig":{"nodeAddresses":["//127.0.0.1:7004","//127.0.0.1:7001","//127.0.0.1:7000"],},"threads":0,"executorServiceThreads": 0,"executorServiceWorkers": {"myExecutor1":3, "myExecutor2":5},"redissonNodeInitializer": {"class":"org.mycompany.MyRedissonNodeInitializer"}
}

以下是YAML格式的配置文件范例,该范例是在集群模式配置方法基础上,增加了Redisson Node的配置参数。

---
clusterServersConfig:nodeAddresses:- "//127.0.0.1:7004"- "//127.0.0.1:7001"- "//127.0.0.1:7000"scanInterval: 1000
threads: 0executorServiceThreads: 0
executorServiceWorkers:myService1: 123myService2: 421
redissonNodeInitializer: !<org.mycompany.MyRedissonNodeInitializer> {}

3、 初始化监听器

Redisson Node提供了在启动完成后,执行RedissonNodeInitializer指定的初始化监听器的机制。这个机制可以用在启动完成时执行注册在类路径(classpath)中分布式远程服务的实现,或其他必要业务逻辑。比如,通知其他订阅者关于一个新节点上线的通知:

public class MyRedissonNodeInitializer implements RedissonNodeInitializer {@Overridepublic void onStartup(RedissonNode redissonNode) {RMap<String, Integer> map = redissonNode.getRedisson().getMap("myMap");// ...// 或redisson.getRemoteService("myRemoteService").register(MyRemoteService.class, new MyRemoteServiceImpl(...));// 或reidsson.getTopic("myNotificationTopic").publish("New node has joined. id:" + redissonNode.getId() + " remote-server:" + redissonNode.getRemoteAddress());}}

4、 嵌入式运行方法

Redisson Node也可以以嵌入式方式运行在其他应用当中。

// Redisson程序化配置代码
Config config = ...
// Redisson Node 程序化配置方法
RedissonNodeConfig nodeConfig = new RedissonNodeConfig(config);
Map<String, Integer> workers = new HashMap<String, Integer>();
workers.put("test", 1);
nodeConfig.setExecutorServiceWorkers(workers);// 创建一个Redisson Node实例
RedissonNode node = RedissonNode.create(nodeConfig);
// 或者通过指定的Redisson实例创建Redisson Node实例
RedissonNode node = RedissonNode.create(nodeConfig, redisson);node.start();//...node.shutdown();

5、命令行运行方法

  1. 下载Redisson Node的JAR包。
  2. 编写一个JSON或YAML格式的配置文件。
  3. 通过以下方式之一运行Redisson Node: java -jar redisson-all.jar config.json 或 java -jar redisson-all.jar config.yaml

另外不要忘记添加-Xmx或-Xms之类的参数。

6、Docker方式运行方法

无现有Redis环境:

  1. 首先运行Redis: docker run -d --name redis-node redis
  2. 再运行Redisson Node: docker run -d --network container:redis-node -e JAVA_OPTS="<java-opts>" -v <path-to-config>:/opt/redisson-node/redisson.conf redisson/redisson-node
  3. <path-to-config> - Redisson Node的JSON或YAML配置文件路径 <java-opts> - JAVA虚拟机的运行参数

有现有Redis环境:

  1. 运行Redisson Node: docker run -d -e JAVA_OPTS="<java-opts>" -v <path-to-config>:/opt/redisson-node/redisson.conf redisson/redisson-node
  2. <path-to-config> - Redisson Node的JSON或YAML配置文件路径 <java-opts> - JAVA虚拟机的运行参数

相关文章:

Redisson—独立节点模式和集群管理工具

一、集群管理工具 Redisson集群管理工具提供了通过程序化的方式&#xff0c;像redis-trib.rb脚本一样方便地管理Redis集群的工具。 1、 创建集群 以下范例展示了如何创建三主三从的Redis集群。 ClusterNodes clusterNodes ClusterNodes.create() .master("127.0.0.1:…...

基于RabbitMQ的模拟消息队列之五——虚拟主机设计

文章目录 一、创建VirtualHost类二、初始化三、API1.创建交换机2.删除交换机3.创建队列4.删除队列5.创建绑定6.删除绑定7.发送消息转发规则 8.订阅消息1.消费者管理2.推送消息给消费者 3.添加一个消费者管理ConsumerManager9.确认消息 创建VirtualHost类。 1.串起内存和硬盘的数…...

Hadoop的概述与安装

Hadoop的概述与安装 一、Hadoop内部的三个核心组件1、HDFS&#xff1a;分布式文件存储系统2、YARN&#xff1a;分布式资源调度系统3、MapReduce&#xff1a;分布式离线计算框架4、Hadoop Common&#xff08;了解即可&#xff09; 二、Hadoop技术诞生的一个生态圈数据采集存储数…...

进程、线程与构造方法

进程、线程与构造方法 目录 一&#xff0e; 进程与线程1. 通俗解释2. 代码实现3. 线程生命周期&#xff08;图解&#xff09; 二&#xff0e; 构造方法 一&#xff0e; 进程与线程 1. 通俗解释 进程&#xff1a;就像电脑上运行的软件&#xff0c;例如QQ等。 线程&#xff1a;…...

04 Linux补充|C/C++

目录 Linux补充 C语⾔ C语言中puts和printf的区别&#xff1f; Linux补充 (1)ubuntu安装ssh服务端openssh-server命令&#xff1a; ubuntu安装后默认只有ssh客户端&#xff0c;只能去连其它ssh服务器&#xff1b;其它客户端想要连接这个ubuntu系统&#xff0c;需要安装部署…...

利用python制作AI图片优化工具

将模糊图片4K高清化效果如下&#xff1a; 优化前的图片 优化后如下图&#xff1a; 优化后图片变大变清晰了效果很明显 软件界面如下&#xff1a; 所用工具和代码&#xff1a; 1、所需软件包 网盘链接&#xff1a;https://pan.baidu.com/s/1CMvn4Y7edDTR4COfu4FviA提取码&…...

React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

1.路由安装(默认安装最新版本6.15.0) npm i react-router-dom 2.路由模式 有常用两种路由模式可选&#xff1a;HashRouter 和 BrowserRouter。 ①HashRouter&#xff1a;URL中采用的是hash(#)部分去创建路由。 ②BrowserRouter&#xff1a;URL采用真实的URL资源&#xff0c;…...

(数字图像处理MATLAB+Python)第十二章图像编码-第一、二节:图像编码基本理论和无损编码

文章目录 一&#xff1a;图像编码基本理论&#xff08;1&#xff09;图像压缩的必要性&#xff08;2&#xff09;图像压缩的可能性A&#xff1a;编码冗余B&#xff1a;像素间冗余C&#xff1a;心理视觉冗余 &#xff08;3&#xff09;图像压缩方法分类A&#xff1a;基于编码前后…...

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…...

golang读取键盘功能按键输入

golang读取键盘功能按键输入 需求 最近业务上需要做一个终端工具&#xff0c;能够直接连到docker容器中进行交互。 技术选型 docker官方提供了python sdk、go sdk和remote api。 https://docs.docker.com/engine/api/sdk/ 因为我们需要提供命令行工具&#xff0c;因此采用g…...

用sklearn实现线性回归和岭回归

此文为ai创作&#xff0c;今天写文章的时候发现创作助手限时免费&#xff0c;想测试一下&#xff0c;于是就有了这篇文章&#xff0c;看的出来&#xff0c;效果还可以&#xff0c;一行没改。 线性回归 在sklearn中&#xff0c;可以使用线性回归模型做多变量回归。下面是一个示…...

结构型模式-桥接模式

用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得实体类的功能独立于接口实现类&#xf…...

缓存的放置时间和删除时间

缓存的放置时间和删除时间是指缓存中存储的数据的生命周期。这两个时间点非常重要&#xff0c;因为它们决定了缓存数据的有效期和何时应该从缓存中删除。 缓存的放置时间&#xff08;Cache Put Time&#xff09;&#xff1a;这是指数据首次放入缓存的时间点。当数据被放入缓存时…...

内网穿透实战应用-如何通过内网穿透实现远程发送个人本地搭建的hMailServer的邮件服务

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工…...

ensp基础命令大全(华为设备命令)

路漫漫其修远兮&#xff0c;吾将上下而求索 今天写一些曾经学习过的网络笔记&#xff0c;希望对您的学习有所帮助。 OSPF,BGP,IS-IS的命令笔记没有写上来&#xff0c;计划单独写&#xff0c;敬请期待&#xff0c;或者您可以在这个网站查查 &#xff1a; 万能查询网站 …...

thinkphp6 入门(4)--数据库操作 增删改查

一、设计数据库表 比如我新建了一个数据库表&#xff0c;名为test 二、配置数据库连接信息 本地测试 直接在.env中修改&#xff0c;不用去config/database.php中修改 正式环境 三、增删改查 引入Db库 use think\facade\Db; 假设新增的控制器路径为 app\test\control…...

MyBatisPlus 基础实现(一)

说明 创建一个最基本的MyBatisPlus项目&#xff0c;参考官网。 依赖 MyBatisPlus 依赖&#xff0c;最新版是&#xff1a;3.5.3.2 &#xff08;截止2023-9-4&#xff09;。 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-bo…...

jmeter 计数器Counter

计数器可以用于生成动态的数值或字符串&#xff0c;以模拟不同的用户或数据。 计数器通常与用户线程组结合使用&#xff0c;以生成不同的变量值并在测试中应用。以下是计数器的几个常用属性&#xff1a; 变量前缀&#xff08;Variable Name Prefix&#xff09;&#xff1a;定义…...

OpenCV(十九):模板匹配

1.模板匹配&#xff1a; OpenCV提供了一个模板匹配函数&#xff0c;用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…...

【iOS】Category、Extension和关联对象

Category分类 Category 是 比继承更为简洁 的方法来对Class进行扩展,无需创建子类就可以为现有的类动态添加方法。 可以给项目内任何已经存在的类 添加 Category甚至可以是系统库/闭源库等只暴露了声明文件的类 添加 Category (看不到.m 文件的类)通过 Category 可以添加 实例…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

vue3 手动封装城市三级联动

要做的功能 示意图是这样的&#xff0c;因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...