1

最初在我们的代码中,我们与在单个节点上使用 RedisRedisTemplate结合使用:JedisConnectionFactoryJedisPoolConfig

   @Bean(name = "redisTemplate")
    public RedisTemplate<String, String> getRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(jedisConnectionFactory);
        // ...
        return template;
    }

    @Bean
    JedisConnectionFactory jedisConnectionFactory(Configuration config) {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName(config.get(HOST));
        jedisConnectionFactory.setPort(config.getInt(PORT));
        jedisConnectionFactory.setUsePool(true);
        jedisConnectionFactory.setPoolConfig(createJedisPoolConfig(config));
        jedisConnectionFactory.afterPropertiesSet();
        return jedisConnectionFactory;
    }

    JedisPoolConfig createJedisPoolConfig(Config config) {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // ...
        return poolConfig;
    }

我们现在使用JedisClusterRedis 集群。

当我们使用 RedisTemplate 时,我们使用了许多命令,例如redisTemplate.hasKey(cacheKey)检查密钥是否存在以及redisTemplate.opsForValue().setRedisTemplate.

这些方法似乎不适用于JedisCluster.

有没有办法可以将 RedisTemplate 与 JedisCluster 结合使用,以避免重新编码这些方法,而只使用 RedisTemplate 提供的方法?

或者是否有替代命令可以用来代替 RedisTemplate 提供的命令?

4

1 回答 1

1

有没有办法可以将 RedisTemplate 与 JedisCluster 结合使用,以避免重新编码这些方法,而只使用 RedisTemplate 提供的方法?

是的,请参考这个SO 答案

或者是否有替代命令可以用来代替 RedisTemplate 提供的命令?

以供将来参考,也是。

RedisTemplate.hasKey(cacheKey)是 Redis EXISTS 命令的接口。
JedisCluster.exists(cacheKey)是等价的。

RedisTemplate.opsForValue().set()是对字符串操作的接口。
JedisCluster.set("key", "value")是等价的。

使用 RedisTemplate 文档找出正在使用的 Redis 命令,然后使用他们的文档将其映射到 Jedis 中的等效命令。

在你最喜欢的搜索引擎中搜索“Redis [COMMAND] in Jedis”应该会得到你需要的东西。

于 2022-02-15T09:48:43.113 回答