【发布时间】:2020-09-02 09:18:53
【问题描述】:
我的应用程序使用 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)
每次我们需要执行操作时,都会从池中借用一个 Jedis 对象
Jedis jedis = JedisPool.getResource();
新的实现是
JedisPoolConfig jedisPoolConfig = ...
HostAndPort hostAndPort = new HostAndPort(host, port);
jedisCluster = new JedisCluster(Collections.singleton(hostAndPort), jedisPoolConfig);
问题: 文档说 JedisCluster 将用于代替 Jedis(而不是 JedisPool)。这是否意味着我需要在每个线程中创建和销毁 JedisCluster 对象。或者我可以重复使用同一个对象,它会处理线程安全吗?那我什么时候才能完全关闭 JedisCluster?申请结束?
【问题讨论】:
-
只是一个旁注,如果你使用redislabs.com/redis-enterprise/cloud,你就不必处理不同的客户端代码做代理/端点