【问题标题】:Transition from JedisPool to JedisCluster从 JedisPool 过渡到 JedisCluster
【发布时间】: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?申请结束?

【问题讨论】:

标签: jedis amazon-elasticache


【解决方案1】:

JedisCluster 保存集群中每个节点的内部 JedisPools。

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

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

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

是的。

【讨论】:

    【解决方案2】:

    用 JedisCluster-calls 替换所有 Jedis-calls 是最好的迁移方式。

    但我想要 JedisCluster 目前缺乏的管道支持。所以另一个想法是扩展 JedisCluster 以返回 JedisPool>Jedis 以获得特定的键:

    protected Jedis getJedis(String key) {
        int slot = JedisClusterCRC16.getSlot(key);
        return connectionHandler.getConnectionFromSlot(slot);
    }
    

    扩展类必须在命名空间 redis.clients.jedis 中才能访问 getConnectionFromSlot。

    现在可以在 Jedis 上执行管道。

    您需要为每个要操作的键使用不同的 Jedis。这是有道理的——在集群模式下,每个键都可以在不同的节点上。

    【讨论】:

    • 如果我获取 Jedis 提供的密钥“X”,然后使用该 Jedis 将密钥“Y”存储到集群中的另一个 redis 实例中会发生什么?
    • @ante.sabo 这种用法将不受支持。正如我所提到的,“您需要为要操作的每个键使用不同的 Jedis”。这更像是一种定制的、经过修改的解决方案,而不是适合所有人的万无一失的绝地武士设计。
    猜你喜欢
    • 2015-05-07
    • 2016-08-26
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多