Добавьте слушателей к истечению срока кэша в Redisson - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь настроить мой клиент Redis Sentinel для выполнения определенных заданий по событию expire для разных ключей, которые я помещаю в кеш.

Это задание должно проверять, обновлять ли значение кэша или дать ему истечь.К сожалению, я не смог найти ничего подобного для redis.

Поддерживает ли redis это или нет никакого способа сделать что-либо для события expiration для значений, которые я храню в кеше?

Моя конфигурация:

 @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson() {
        Config config = new Config();
        SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
        for (String node : redisNodes) {
            sentinelServersConfig.addSentinelAddress(REDIS_PROTOCOL + node);
        }
        sentinelServersConfig.setMasterName(redisMaster);
        return Redisson.create(config);
    }

 @Bean
    public MyCache myCache() {
        return new MyCache(redisTemplate(), cacheTTL);
    }

    private <K, V> RedisTemplate<K, V> redisTemplate() {
        RedisTemplate<K, V> template = new RedisTemplate<>();
        template.setConnectionFactory(redissonConnectionFactory(redisson()));
        GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer keySerializer = new StringRedisSerializer();
        template.setKeySerializer(keySerializer);
        template.setValueSerializer(valueSerializer);
        template.setHashKeySerializer(keySerializer);
        template.setHashValueSerializer(valueSerializer);
        template.afterPropertiesSet();
        return template;
    }

Способ размещения элементов в кэше:

    public void putElement(String key, T value, Duration duration) {
        String formattedKey = getKey(key);
        redisTemplate.opsForValue().set(formattedKey, value);
        redisTemplate.expire(formattedKey, duration.toMillis(), MILLISECONDS);
    }

pom.xml

  <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-data-18</artifactId>
            <version>${redisson-spring-data-version}</version>
        </dependency>
...