如何有效使用JedisCluster

Tom*_*Tom 1 redis

我是 Redis 新手,我正在使用 Redis Java 客户端来处理 Redis 集群。

我有以下代码:

public class HelloRedisCluster {
    public static void main(String[] args) {
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("127.0.0.1", 6001));
        nodes.add(new HostAndPort("127.0.0.1", 6002));
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10000);
        config.setMaxIdle(500);

        JedisCluster cluster = new JedisCluster(nodes);
        cluster.set("abc", "123");
        System.out.println(cluster.get("abc"));
        cluster.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,它只是打开集群,使用 Redis 设置/获取,然后关闭集群。

如果代码作为服务运行(例如在Servlet中),那么它将频繁地打开和关闭集群,这会导致性能不佳。

请问如何有效使用JedisCluster?

谢谢!

Tom*_*Tom 7

我已经弄清楚了 JedisCluster 的工作方式。在内部,它已经使用了Jedis Pool。

JedisCluster提供的操作遵循相同的模式,例如set

1. Borrow a Jedis object from Jedis Pool
2. Call Jedis#set method
3. Release the Jedis object back to the pool.
Run Code Online (Sandbox Code Playgroud)

这样,我们就可以在 Singleton 对象中保存一个 JedisCluster 实例,然后在 JVM 退出时关闭 JedisCluster 对象,代码如下:

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashSet;
import java.util.Set;

public class JedisClusterUtil {
    private static JedisCluster cluster;

    static {
        Set<HostAndPort> nodes = new HashSet<HostAndPort>();
        nodes.add(new HostAndPort("127.0.0.1", 6001));
        nodes.add(new HostAndPort("127.0.0.1", 6002));
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10000);
        config.setMaxIdle(500);

        cluster = new JedisCluster(nodes, config);

        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                if (cluster != null) {
                    cluster.close();
                }
            }
        });
    }

    public static JedisCluster getCluster() {
        return cluster;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • JedisCluster初始化完成后,redis集群中的一个节点出现故障会发生什么 (4认同)