我们刚刚从redis单机迁移到集群,我们遇到了以下异常:RedisSystemException:执行错误;嵌套异常为io. lett.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);
}
}
字符串
我是不是理解错了?任何可能有效的代码片段示例输入都可能帮助我完成这一过程?
1条答案
按热度按时间tpxzln5u1#
我试图为一个redis键传递不同的键:value。问题是每次传递相同的密钥,而不是冒险更改它。例如
字符串
这篇博客提供了一个很好的洞察力:https://hackernoon.com/resolving-the-crossslot-keys-error-with-redis-cluster-mode-enabled