从 JedisPool 过渡到 JedisCluster

Pra*_*oor 4 jedis amazon-elasticache

我的应用程序使用 AWS 上的 ElastiCache 进行缓存。我们当前的设置使用基本的 Redis 集群,没有分片或故障转移。我们现在需要迁移到启用了分片、故障转移等的集群 Redis 弹性缓存。在 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)
Run Code Online (Sandbox Code Playgroud)

每次我们需要执行操作时,都会从池中借用 Jedis 对象

Jedis jedis = JedisPool.getResource();
Run Code Online (Sandbox Code Playgroud)

新的实施将是

JedisPoolConfig jedisPoolConfig = ...
HostAndPort hostAndPort = new HostAndPort(host, port);
jedisCluster = new JedisCluster(Collections.singleton(hostAndPort), jedisPoolConfig);
Run Code Online (Sandbox Code Playgroud)

问题:文档说 JedisCluster 将用于代替 Jedis(而不是 JedisPool)。这是否意味着我需要在每个线程中创建和销毁一个 JedisCluster 对象。或者我可以重用同一个对象,它会处理线程安全吗?我什么时候完全关闭 JedisCluster 呢?在申请结束时?

Guy*_*and 7

JedisCluster保持内部JedisPool为集群中的每个节点s。

这是否意味着我需要在每个线程中创建和销毁一个 JedisCluster 对象。或者我可以重用同一个对象,它会处理线程安全吗?

您可以重复使用相同的对象。

我什么时候完全关闭 JedisCluster 呢?在申请结束时?

是的。