我们刚刚从redisstandalone转移到集群,我们遇到了以下异常:RedisSystemException:执行中出错;嵌套异常为io.lettuce.core.RedisCommandExecutionException:请求中的CROSSSLOT密钥不哈希到同一个插槽。
在进一步深入研究时,我发现当请求中的密钥在redisTemplate.opsForZSet().contersectAndStore/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);
}
}
这个概念我理解错了吗?任何可能有效的代码片段示例输入都可能帮助我度过难关?