Я пытаюсь настроить мой клиент 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>