JedisCluster 使用方法

本文详细介绍如何配置和使用JedisCluster连接Redis集群,包括设置集群节点、连接池配置及参数调整,如最大空闲连接数、最大连接数等。

JedisCluster 使用方法

https://www.cnblogs.com/c-xiaohai/p/8376364.html

    @Bean
    JedisCluster jedisCluster() {
        // 添加集群的服务节点Set集合
        Set<HostAndPort> hostAndPortsSet = new HashSet<>();
        // 添加节点
        hostAndPortsSet.add(new HostAndPort("192.168.56.180", 7777));
        hostAndPortsSet.add(new HostAndPort("192.168.56.180", 8888));
        hostAndPortsSet.add(new HostAndPort("192.168.56.181", 7777));
        hostAndPortsSet.add(new HostAndPort("192.168.56.181", 8888));
        hostAndPortsSet.add(new HostAndPort("192.168.56.182", 7777));
        hostAndPortsSet.add(new HostAndPort("192.168.56.182", 8888));

        // Jedis连接池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大空闲连接数, 默认8个
        jedisPoolConfig.setMaxIdle(100);
        // 最大连接数, 默认8个
        jedisPoolConfig.setMaxTotal(500);
        //最小空闲连接数, 默认0
        jedisPoolConfig.setMinIdle(0);
        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        jedisPoolConfig.setMaxWaitMillis(2000); // 设置2秒
        //对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(true);
        return new JedisCluster(hostAndPortsSet, jedisPoolConfig);
    }

 

### JedisCluster 中 `mset` 方法使用Redis 集群模式下,`JedisCluster` 提供了与单机版类似的 API 接口来执行各种操作。其中,`mset` 是用于批量设置键值对的方法之一。为了确保数据能够正确分布到不同的节点上并满足一致性哈希的要求,在使用 `mset` 时需要注意 HashTag 的应用。 以下是基于 `JedisCluster` 实现 `mset` 方法的一个完整示例: ```java import redis.clients.jedis.JedisCluster; import java.util.HashMap; public class JedisClusterMSetExample { public static void main(String[] args) { // 初始化 JedisCluster 对象 JedisCluster jedisCluster = new JedisCluster( getRedisNodes(), // 自定义获取 Redis 节点列表的方法 2000, // 连接超时时间 5000 // 最大重试等待时间 ); try { // 创建一个 HashMap 存储多个 key-value 键值对 HashMap<String, String> keyValueMap = new HashMap<>(); keyValueMap.put("{user}:1", "Alice"); keyValueMap.put("{user}:2", "Bob"); keyValueMap.put("{user}:3", "Charlie"); // 执行 mset 命令 String result = jedisCluster.mset(keyValueMap); // 输出结果 System.out.println("MSET Result: " + result); // 可选:验证存储的数据 System.out.println("User 1: " + jedisCluster.get("{user}:1")); System.out.println("User 2: " + jedisCluster.get("{user}:2")); System.out.println("User 3: " + jedisCluster.get("{user}:3")); } finally { if (jedisCluster != null) { jedisCluster.close(); } } } private static java.util.Set<redis.clients.jedis.HostAndPort> getRedisNodes() { java.util.Set<redis.clients.jedis.HostAndPort> nodes = new java.util.HashSet<>(); nodes.add(new redis.clients.jedis.HostAndPort("192.168.230.131", 7000)); nodes.add(new redis.clients.jedis.HostAndPort("192.168.230.131", 7001)); nodes.add(new redis.clients.jedis.HostAndPort("192.168.230.131", 7002)); return nodes; } } ``` #### 关于 HashTag 的说明 上述代码中,所有的键都带有 `{user}` 的 HashTag[^2]。这使得这些键被映射到同一个 slot 上,从而可以安全地在一个事务或者多键命令(如 `mget`, `mset`)中一起处理。如果未使用一致的 HashTag,则可能导致不同键分布在不同的槽位甚至不同的物理机器上,进而引发错误或不可预期的行为。 #### 注意事项 - 如果不希望依赖特定的 slot 分配策略,请勿随意添加 HashTags。 - 当涉及跨槽的操作时,某些命令可能无法正常工作;因此建议合理规划 keyspace 和其对应的 slots 设计。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值