企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
`Sentinel`机制下,客户端应该怎么连接上`master`服务呢?因为`master`是可能改变的。所以在`Sentinel`机制下,客户端需要连接上`Sentinel`服务,然后从`Sentinel`服务获得`master`节点的地址进行连接。如下图所示: ![](https://img.kancloud.cn/ce/8d/ce8d05cdc4ef72cd32ba3b8a6552f7e1_748x325.png) #### Jedis 使用 Sentinel 机制 单独的`master-slave`集群使用方式和单台`Redis`的使用方式没有区别,所以我们在实验十一中并没有去讲解如何使用。但是`Sentinel`的使用和单台`Redis`的使用上有点区别,接下来大家跟着我一起动手写一个简单的`Sentinel`使用`demo`(后续还有两个实验也会有`demo`的讲解,为了方便使用第三方`jar`包,在这里我预先搭建好了一个简单的`Spring Boot`项目的骨架,大家就不需要再单独去创建了): 1. 执行命令进行下载、解压缩。 ~~~bash cd /home/project # 下载 wget https://labfile.oss.aliyuncs.com/courses/3368/redis-demo.zip # 解压缩 unzip redis-demo.zip ~~~ 2. 打开`redis-demo`文件夹,找到`pom.xml`文件,引入如下`pom`依赖: ~~~java <dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <scope>compile</scope> </dependency> </dependencies> ~~~ 如下图所示: ![](https://img.kancloud.cn/e1/6d/e16da6e37f69ffa01ac60fe373df708d_851x368.png) 3. `pom`文件中还有一个属性就是指定当前项目的`main`函数入口,如果大家和我的包名或者类名(下面步骤`4`中的类名)不一致,那么也需要修改一下: ![](https://img.kancloud.cn/50/99/50991dd8eb3480375988446154c5ee33_1012x294.png) 4. 在`src/main/java`目录下的`com.lonely.wolf.redis`包内新建一个测试类`TestJedisSentinel.java`进行测试: ~~~java package com.lonely.wolf.redis; import redis.clients.jedis.JedisSentinelPool; import java.util.HashSet; import java.util.Set; public class TestJedisSentinel { private static JedisSentinelPool pool; private static JedisSentinelPool initJedisSentinelPool() { String masterName = "mymaster"; // mymaster的名字需要和sentinel.conf配置文件里面的名称相同 Set<String> sentinels = new HashSet<String>(); sentinels.add("localhost:26379"); sentinels.add("localhost:26380"); sentinels.add("localhost:26381"); pool = new JedisSentinelPool(masterName, sentinels); return pool; } public static void main(String[] args) { JedisSentinelPool pool = initJedisSentinelPool(); pool.getResource().set("name", "longly_wolf"); System.out.println(pool.getResource().get("name")); } } ~~~ 连接时需要把所有`Sentinel`的连接建立并放入池内,然后客户端会遍历其中所有服务,找到第一个可用的`Sentinel`服务,并获取到`master`服务器的地址,然后建立连接。 5. 执行如下命令(注意这里是因为环境中已经默认安装了`maven`,如果是在自己的机器上则需要安装`maven`)。 ~~~bash # 进入项目主目录 cd redis-demo # 将项目打包成一个 jar 包 mvn clean package -Dmaven.test.skip=true ~~~ 当出现`BUILD SUCCESS`则表示打包成功,这时候找到`target`目录发现一个`jar`包: ![](https://img.kancloud.cn/22/c0/22c0b12404df3c6cc76e56d3f04480df_990x455.png) 6. 执行命令,运行项目可以成功输出`lonely_wolf`。 ~~~bash java -jar target/redis-demo-1.0.0-SNAPSHOT.jar ~~~ ![](https://img.kancloud.cn/23/87/23873f41ac12e0ce70638349ea9ccd67_659x176.png) 这就说明我们的`Sentinel`服务正常运行了,因为代码中我们并没有显示指定`master`节点,而是通过`Sentinel`动态获取。