redis单机和集群的切换

本文介绍如何在Redis单机与集群之间进行切换,避免编写两套代码。通过策略模式,创建一个`jedisclient`接口,分别由`JedisCluster`和`JedisPool`实现,分别对应集群和单机操作。通过配置文件动态加载实现单机或集群模式,并通过注释配置轻松切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在redis单机中用的是JedisCluster。在redis集群中用的是JedisPool。一般来说在开发环境中用单机就可以,而生产的时候就要切换到集群中了。

        那么要需要两套代码吗?当然不是我们可以使用策略模式。

       创建一个jedisclient接口

public interface JedisClient {

	String set(String key, String value);
	String get(String key);
	Boolean exists(String key);
	Long expire(String key, int seconds);
	Long ttl(String key);
	Long incr(String key);
	Long hset(String key, String field, String value);
	String hget(String key, String field);
	Long hdel(String key, String... field);
	Boolean hexists(String key, String field);
	List<String> hvals(String key);
	Long del(String key);
}

里面包含redis中的基本操作,然后创建一个JedisCluster类实现接口,其中的属性是jediscluster。集群工具类。然后创建一个JedisClientPool类实现接口,其中的属性是JedisPool。单机工具类。

配置文件中

 <!-- 连接redis单机版 -->
   <bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
      &l
### Spring Boot 应用程序配置以同时连接 Redis 单机集群 为了使应用程序能够同时处理来自 Redis 单实例以及 Redis 集群的数据存储需求,在 `application.properties` 或者 `application.yml` 文件中定义两组不同的属性来区分这两种类型的连接设置。 对于基于 Java 的配置方式,可以创建两个不同前缀的 Bean 来分别代表单节点客户端与集群客户端: #### 使用 Properties 格式的 Application Configuration ```properties # Standalone Redis connection settings spring.redis.standalone.host=127.0.0.1 spring.redis.standalone.port=6379 spring.redis.standalone.password= spring.redis.standalone.timeout=6000 # Redis Cluster connection settings spring.redis.cluster.nodes=127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002 spring.redis.cluster.max-redirects=3 ``` 上述配置指定了独立服务器的具体地址、端口以及其他必要的参数;而对于集群,则提供了多个节点的信息以便于建立分布式环境下的链接[^1]。 #### 使用 Yaml 格式的 Application Configuration ```yaml spring: redis: standalone: host: 127.0.0.1 port: 6379 password: "" timeout: 6000ms cluster: nodes: - "127.0.0.1:7000" - "127.0.0.1:7001" - "127.0.0.1:7002" maxRedirects: 3 ``` 此 YAML 版本同样包含了针对单一实例及集群模式下所需的所有必要字段,并通过列表形式列举出了构成集群的所有成员节点。 接着需要编写相应的 Java 类用于加载这些自定义配置项并初始化对应的 Jedis 连接池对象。这可以通过实现 `@ConfigurationProperties` 接口完成自动装配过程中的映射工作。 最后一步是在服务层逻辑里根据业务场景选择合适的缓存组件进行操作即可达成目标功能。 ```java @Configuration public class RedisConfig { @Bean(name="standaloneJedisConnectionFactory") public JedisConnectionFactory standaloneRedisConnectionFactory(@Value("${spring.redis.standalone.host}") String host, @Value("${spring.redis.standalone.port}") int port){ RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host,port); return new JedisConnectionFactory(config); } @Bean(name="clusterJedisConnectionFactory") public JedisConnectionFactory clusterRedisConnectionFactory(List<String> clusterNodes){ RedisClusterConfiguration config = new RedisClusterConfiguration(clusterNodes.stream().map(node -> { String[] parts = node.split(":"); return new HostAndPort(parts[0], Integer.parseInt(parts[1])); }).collect(Collectors.toList())); return new JedisConnectionFactory(config); } } ``` 这段代码展示了如何利用 Spring 提供的功能去构建两种不同类型 (即单独运行 vs 成员间协作) 的 Redis 数据库之间的桥梁,从而允许开发者在同一项目内灵活切换访问策略。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值