Redis 模板不会自动保存幻影实体

问题描述

冒着自欺欺人的风险,我有一个关于redis的问题,困扰了我2天。 我有一个带有 spring boot 2.4.0 的基本项目(包括 spring-data-redis)。 我有以下 RedisEntity:

 @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 分钟?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)