redis模板不会自动保存虚拟实体

icomxhvb  于 2021-06-07  发布在  Redis
关注(0)|答案(0)|浏览(294)

冒着出丑的风险,我有一个关于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分钟?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题