Ошибка ключей CROSSSLOT с включенным режимом кластера Redis в Springboot с использованием конфигурации Lettuce ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Ошибка ключей CROSSSLOT с включенным режимом кластера Redis в Springboot с использованием конфигурации Lettuce

Сообщение Anonymous »

Мы только что перешли с автономного Redis на кластер и столкнулись со следующим исключением: RedisSystemException: Ошибка при выполнении; вложенным исключением является io.lettuce.core.RedisCommandExecutionException: ключи CROSSSLOT в запросе не хэшируются в один и тот же слот.
При дальнейшем копании я обнаружил, что эта проблема проявляется, когда ключи в запросе не хэшируются с тот же слот во время redisTemplate.opsForZSet().intersectAndStore / redisTemplate.opsForZSet().differenceAndStore и подобных операций пересечения объединения.
Я столкнулся с концепцией, называемой хэштегами, но не могу понять способ решить эту проблему с помощью моего кода

Код: Выделить всё

     @LogMethodCall
public String getValueByKey(String key) {
if (BooleanUtils.isTrue(keyExists(key))) {
return redisTemplate.opsForValue().get(key+"{someconstantstring}");
}
return null;
}

@LogMethodCall
public void save(String key, String value) {
if (StringUtils.isNotEmpty(key)) {
redisTemplate.opsForValue().set(key+"{someconstantstring}", value);
}
}

@LogMethodCall
public void saveWithExpiryInMinutes(String key, String value, long expiryTime) {
if (StringUtils.isNotEmpty(key)) {
redisTemplate.opsForValue().set(key+"someconstantstring", value, expiryTime, TimeUnit.MINUTES);
}
}

@LogMethodCall
public void saveWithExpiryInSeconds(String key, String value, long expiryTime) {
if (StringUtils.isNotEmpty(key)) {
redisTemplate.opsForValue().set(key+"{someconstantstring}", value, expiryTime, TimeUnit.SECONDS);
}
}
Неужели я неправильно понял концепцию? Любые входные данные с примерами фрагментов кода, которые могут работать, вероятно, помогут мне справиться с этим?

Подробнее здесь: https://stackoverflow.com/questions/767 ... ng-lettuce

Вернуться в «JAVA»