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

简介: 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);
}

 

 


相关文章
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
828 2
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1269 5
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
1539 4
|
12月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
939 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
11月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1009 6
|
12月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
438 5
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
429 32
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
896 2
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。