Мне нужно использовать 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) {
}
}
}
Может кто-нибудь помочь с этим?