I am using Spring Data Redis in my API. I am trying run the following command through Java:
Set<String> union = redisTemplate.opsForSet().union(ids);
which is causing CROSSSLOT Keys in request don't hash to the same slot err since keys I am searching are on different shards.
My Redis db model is having SET datamodel for keys which I am trying to find.
Is there any way Lettuce can find keys across shards and I can avoid this err. My LettuceConnectionFactory is as it is:
@Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setPort(port); redisStandaloneConfiguration.setHostName(host); redisStandaloneConfiguration.setDatabase(database); if (StringUtils.isNotBlank(password)) redisStandaloneConfiguration.setPassword(password); LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder(); if (useSSl) { builder.useSsl(); } LettuceClientConfiguration clientConfiguration = builder .commandTimeout(Duration.ofSeconds(redisTimeoutMillis)) .clientOptions(ClientOptions .builder() .disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS) .build()) .build(); LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration, clientConfiguration); connectionFactory.afterPropertiesSet(); return connectionFactory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); return template; }
Also, is it possible to avoid union operation and use org.springframework.data.repository.CrudRepository findAllByIds(ids) to get the same output?