Unable to fetch value from Redis Cache using ReactiveRedisTemplate

49 Views Asked by At

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);

    }
0

There are 0 best solutions below