Как эффективно использовать JedisCluster - PullRequest
0 голосов
/ 17 мая 2019

Я новичок в Redis и использую Redis Java Client для работы с кластером 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();
    }
}

В приведенном выше коде он просто открываеткластера, установите / получите с помощью Redis, а затем закройте кластер.

Если код работает как служба (например, в сервлете), он будет часто открывать и закрывать кластер, что приведет к снижению производительности.

Я бы спросил, как эффективно использовать JedisCluster?

Спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

Я выяснил, как работает 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.

Таким образом, мы можем сохранить экземпляр JedisCluster в объекте Singleton, а затем закрыть объект JedisCluster при выходе из JVM, используя следующий код:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...