Как исправить 'Нет способа отправить эту команду в Redis Cluster, потому что ключи имеют разные слоты' в Spring - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно использовать Redis Cluster весной. Но я получаю следующую ошибку, когда использую mget или del в списке ключей: «Нет способа отправить эту команду в Redis Cluster, потому что ключи имеют разные слоты». Отображение части кода моего компонента с использованием JedisCluster.

Это работает, когда я использую операции с одним ключом, но не с несколькими ключами.

/* Component Code */
public class RedisServiceManager {

    @Value("${redis.hosts}")
    String hosts;

    @Autowired
    JedisPoolConfig jedisPoolConfig;

    private JedisCluster jedisCluster;

    @PostConstruct
    private void init() {
        List<String> redisHosts = Arrays.asList(hosts.split(","));
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        redisHosts.forEach(redisHost -> {
            jedisClusterNode.add(new HostAndPort(redisHost, 6379));
        });
        jedisCluster = new JedisCluster(jedisClusterNode, jedisPoolConfig);
    }

    // This works
    public String getValueForKey(String key) {
        try {
            return jedisCluster.get(key);
        } catch (Exception e) {
            return null;
        }
    }

    // This works
    public void delKey(String cacheKey) {
        try {
            jedisCluster.del(cacheKey);
        } catch (Exception e) {
        }
    }

    // This doesn't work
    public List<String> getValuesForAllKeys(String... keys) {
        try {
            return jedisCluster.mget(keys);
        } catch (Exception e) {
            return new ArrayList<>();
        }
    }

    // This doesn't work
    public void delAllKeys(String... keys) {
        try {
            jedisCluster.del(keys);
        } catch (Exception e) {
        }
    }
}

Может кто-нибудь помочь с этим?

...