Переход от JedisPool к JedisCluster - PullRequest
0 голосов
/ 18 декабря 2018

Мое приложение использует ElastiCache на AWS для целей кэширования.Наша текущая настройка использует базовый кластер Redis без шардинга и отработки отказа.Теперь нам нужно перейти к кластерному Redis Elastic Cache с включенным шардингом, аварийным переключением и т. Д.Создать новый кластер в AWS было непросто, но мы немного растеряны, как изменить наш Java-код для чтения и записи из кластера.

Текущая реализация - инициализация JedisPool.

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(100);
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxWaitMillis(50);
jedisPoolConfig.setTestOnBorrow(true);

String host = "mycache.db8e1v.0001.usw2.cache.amazonaws.com";
int port = 6379;
int timeout = 50;

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout)

Объект Jedis заимствуется из пула каждый раз, когда нам нужно выполнить операцию

Jedis jedis = JedisPool.getResource();

Новая реализация будет

JedisPoolConfig jedisPoolConfig = ...
HostAndPort hostAndPort = new HostAndPort(host, port);
jedisCluster = new JedisCluster(Collections.singleton(hostAndPort), jedisPoolConfig);

Вопрос: в документации говорится, что JedisClusterдолжен использоваться вместо джедаев (не JedisPool).Означает ли это, что мне нужно создавать и уничтожать объект JedisCluster в каждом потоке.Или я могу повторно использовать тот же объект, и он будет обрабатывать поток безопасности?Когда я тогда точно закрою JedisCluster?В конце заявки?

1 Ответ

0 голосов
/ 20 декабря 2018

JedisCluster содержит внутренние JedisPool s для каждого узла в кластере.

Означает ли это, что мне нужно создать и уничтожить объект JedisCluster в каждом потоке.Или я могу повторно использовать тот же объект, и он будет обеспечивать безопасность потока?

Вы можете повторно использовать один и тот же объект.

Когда я точно закрою JedisCluster, тогда?В конце заявки?

Да.

...