冒着出丑的风险,我有一个关于redis的问题困扰了我两天。我有一个springboot2.4.0的基本项目(包括springdataredis)。我拥有以下实体:
@RedisHash
@Getter
@Setter
@ToString
public class RedisEntity implements Serializable {
private @Id String id;
private @Indexed String secondaryIndex;
private @TimeToLive Long expirationTime;
以及一个基本服务,它保存了我的redis实体:
public String persistEntity() {
RedisEntity myEntity = new RedisEntity();
myEntity.setId("1234");
myEntity.setExpirationTime(10L);
myEntity.setSecondaryIndex("456");
cacheTemplate.opsForValue().set(myEntity.getId(), myEntity,
myEntity.getExpirationTime(), TimeUnit.SECONDS);
log.info("Saved entity to REDIS! Entity=" + myEntity);
return myEntity.toString();
}
redis模板配置如下:
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory rcf) {
return createTemplate(rcf, new Jackson2JsonRedisSerializer(RedisEntity.class));
}
private <K, V, S extends RedisSerializer> RedisTemplate<K, V> createTemplate(
RedisConnectionFactory factory, S valueSerializer) {
RedisTemplate<K, V> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
实体保存在redis中,但当它过期时,我无法检索我放置的值(虚拟实体不存在) @EnableRedisRepositories(shadowCopy = ShadowCopy.ON)
在我的主课上,但没有用。当实体过期时,redis将删除所有内容。
有人经历过类似的事情吗?我是否需要手动保存副本并将其过期时间设置为5分钟?
暂无答案!
目前还没有任何答案,快来回答吧!