我正在尝试将我的 redis 哨兵客户端配置为在过期事件中针对我放入缓存的不同键执行我的特定作业。
这个作业应该检查是更新缓存值还是让它过期。不幸的是,我找不到类似 redis 的东西。
redis 是否甚至支持它,或者我无法在过期事件中为我存储在缓存中的值做任何事情?
我的配置:
@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>