Redis集群:使用Spring和jedisCluster操作Redis集群

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis集群:使用Spring和jedisCluster操作Redis集群

jedisCluster

非Spring和jedisCluster操作Redis集群

jar包

 <!-- 指定版本号 -->
<properties>
  <!-- JEDIS -->
  <jedis.version>2.7.1</jedis.version>
</properties>
<!-- JEDIS -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>${jedis.version}</version>
</dependency>

测试代码

// 连接redis集群
@Test
public void testJedisCluster() {
  JedisPoolConfig config = new JedisPoolConfig();
  // 最大连接数
  config.setMaxTotal(30);
  // 最大连接空闲数
  config.setMaxIdle(2);
  //集群结点
  Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7001));
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7002));
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7003));
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7004));
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7005));
  jedisClusterNode.add(new HostAndPort("192.168.101.3", 7006));
  JedisCluster jc = new JedisCluster(jedisClusterNode, config);
  JedisCluster jcd = new JedisCluster(jedisClusterNode);
  jcd.set("name", "zhangsan");
  String value = jcd.get("name");
  System.out.println(value);
}


Spring和jedisCluster操作Redis集群

配置applicationContext.xml

没有集群密码

<!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  <!-- 最大连接数 -->
  <property name="maxTotal" value="30" />
  <!-- 最大空闲连接数 -->
  <property name="maxIdle" value="10" />
  <!-- 每次释放连接的最大数目 -->
  <property name="numTestsPerEvictionRun" value="1024" />
  <!-- 释放连接的扫描间隔(毫秒) -->
  <property name="timeBetweenEvictionRunsMillis" value="30000" />
  <!-- 连接最小空闲时间 -->
  <property name="minEvictableIdleTimeMillis" value="1800000" />
  <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
  <property name="softMinEvictableIdleTimeMillis" value="10000" />
  <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
  <property name="maxWaitMillis" value="1500" />
  <!-- 在获取连接的时候检查有效性, 默认false -->
  <property name="testOnBorrow" value="true" />
  <!-- 在空闲时检查有效性, 默认false -->
  <property name="testWhileIdle" value="true" />
  <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
  <property name="blockWhenExhausted" value="false" />
</bean> 
<!-- redis集群 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  <constructor-arg index="0">
    <set>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7001"></constructor-arg>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7002"></constructor-arg>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7003"></constructor-arg>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7004"></constructor-arg>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7005"></constructor-arg>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg index="0" value="192.168.101.3"></constructor-arg>
        <constructor-arg index="1" value="7006"></constructor-arg>
      </bean>
    </set>
  </constructor-arg>
  <constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>
</bean>


如果需要设置redis集群密码,可以这样配置

<!--配置redis集群 -->
<bean id="jedisCuster" class="redis.clients.jedis.JedisCluster">
  <constructor-arg name="jedisClusterNode">
    <!--设置集群节点 -->
    <set>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port1}"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port2}"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port3}"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port4}"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port5}"/>
      </bean>
      <bean class="redis.clients.jedis.HostAndPort">
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port6}"/>
      </bean>
    </set>
  </constructor-arg>
  <!--设置连接超时时间 -->
  <constructor-arg name="connectionTimeout" value="${redis.timeout}"/>
  <!--设置网络通信超时时间 -->
  <constructor-arg name="soTimeout" value="${redis.soTimeout}"/>
  <!--设置集群访问密码 -->
  <constructor-arg name="password" value="${redis.password}"/>
  <!--设置最大重试次数 -->
  <constructor-arg name="maxAttempts" value="${redis.attempts}"/>
  <!--设置jedisPool配置 -->
  <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>


测试代码

private ApplicationContext applicationContext;
@Before
public void init() {
  applicationContext = new ClassPathXmlApplicationContext(
      "classpath:applicationContext.xml");
}
//redis集群
@Test
public void testJedisCluster() {
JedisCluster jedisCluster = (JedisCluster) applicationContext
        .getBean("jedisCluster");
  jedisCluster.set("name", "zhangsan");
  String value = jedisCluster.get("name");
  System.out.println(value);
}

 

 


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
282 5
Spring Boot整合Redis
通过Spring Boot整合Redis,可以显著提升应用的性能和响应速度。在本文中,我们详细介绍了如何配置和使用Redis,包括基本的CRUD操作和具有过期时间的值设置方法。希望本文能帮助你在实际项目中高效地整合和使用Redis。
159 2
|
5月前
|
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
130 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
277 2
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
113 0
|
4天前
|
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
108 79
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
77 12
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
45 8
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
600 17
Spring Boot 两种部署到服务器的方式
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
88 17
springboot自动配置原理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等