I am trying to insert record in Redis Cache using TestContainer.
My Key/Value pair for redis cache is String and Set of SccRuleDetail.
I can write record to Redis Cache using StringRedisTemplate<String, String>
I am using ReactiveRedisTemplate<String, Object> but it seems like it is inserting the record but when i try to get the record, it says null. I am using StepVerifier to check if record is inserted or not and I am getting expected value. I am not sure why I am getting null value while retrieving records.
Here is my code.
@Test
public void testAddSccRules() throws JsonProcessingException {
String sccActiveRuleRedisKey = "1G"+"79JP"+"130";
Set<SccRuleDetail> sccRuleDetails = new HashSet<>();
SccRuleDetail sccRuleDetail = new SccRuleDetail();
sccRuleDetail.setRowNumber(1);
sccRuleDetail.setRuleID("130");
sccRuleDetail.setCarrierList("AA");
sccRuleDetail.setLocationFromList("DEN");
sccRuleDetail.setLocationToList("JFK");
sccRuleDetails.add(sccRuleDetail);
Map sccRulesMap = new HashMap<String, List<SccRuleDetail>>();
sccRulesMap.put(sccActiveRuleRedisKey, sccRuleDetails);
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisStandaloneConfiguration(redis.getContainerIpAddress(), redis.getMappedPort(6379)));
connectionFactory.afterPropertiesSet();
RedisSerializer<String> keySerializer = new StringRedisSerializer();
RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) new SnappySerializer();
RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
RedisSerializationContext.newSerializationContext((RedisSerializer<?>) keySerializer);
RedisSerializationContext<String, Object> serializationContext =
builder.value(valueSerializer).build();
ReactiveRedisTemplate<String, Object> reactiveRedisTemplate =
new ReactiveRedisTemplate<>(connectionFactory, serializationContext);
System.out.println("redisTemplate = " + reactiveRedisTemplate);
Mono<Boolean> result = reactiveRedisTemplate.opsForValue().multiSet(sccRulesMap);
StepVerifier.create(result)
.expectNext(true)
.verifyComplete();
sccRulesMap.forEach((k, v) -> reactiveRedisTemplate.expire(sccActiveRuleRedisKey, Duration.ofMinutes(100L)).subscribe());
Object sccRulesObj = stringRedisTemplate.opsForValue().get(sccActiveRuleRedisKey);
System.out.println("obj =" + sccRulesObj);
}