我想在快到期时刷新缓存。所以我重写了springcache的一部分,并在我自己的rediscachemanager中管理缓存。
一切正常,但是当运行“get”方法时,意外的值在我自己的定制ediscache中返回。当时,redis中的cache 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。我不明白这是什么意思。
1条答案
按热度按时间klr1opcd1#
redis文档:
从redis 2.8开始,错误更改时的返回值:
如果键不存在,则命令返回-2。
如果密钥存在但没有关联的expire,则命令返回-1。
我建议您确保密钥是正确的,并且在
getExpire
已执行