【问题标题】:RedisTemplate getExpire() return unexpect value in SpringcacheRedisTemplate getExpire() 在 Springcache 中返回意外值
【发布时间】:2020-06-23 00:35:53
【问题描述】:

我想在快到期时刷新缓存。于是我重写了部分springcache,在自己的redisCacheManager中管理缓存。

一切正常,但是在运行“get”方法时,在我自己的CustomizedRedisCache中返回了意想不到的值。那个时候redis中的缓存key确实和“cacheKey”属性是一样的。

    @Override
    public ValueWrapper get(final Object key) {
        ValueWrapper valueWrapper = super.get(key);
        if (null != valueWrapper) {
            String cacheKey = this.createCacheKey(key);
            log.info("cache name in redis = {}", cacheKey);
            Long ttl = this.redisTemplate.getExpire(cacheKey, TimeUnit.SECONDS);
            log.info("{}s before expire ", ttl);
        }
        return valueWrapper;
    }

字段 ttl 总是返回 -2 。我不明白这是什么意思。

【问题讨论】:

    标签: java redis spring-cache


    【解决方案1】:

    来自 redis 文档:

    从 Redis 2.8 开始,发生错误时的返回值发生了变化:

    • 如果密钥不存在,该命令返回 -2。
    • 如果密钥存在但没有关联的过期时间,则该命令返回 -1。

    我建议您在执行 getExpire 时确保密钥正确并且确实存在于 redist 中

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2014-12-11
      • 2016-01-30
      • 1970-01-01
      相关资源
      最近更新 更多