You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Redis客户端(含Redisson)是否支持ExpireAfterRead/Write/Update TTL原语?

Java Redis客户端对ExpireAfterRead/Write/Update的支持

目前确实有Java Redis客户端支持这类基于访问行为的TTL原语,其中你正在使用的Redisson就具备相关能力,另外还有一些其他方案:

Redisson的实现方式

Redisson提供了针对缓存条目的TTL动态调整能力,对应你提到的几种场景:

  • ExpireAfterWrite:可以通过RMap、RCache等对象的expireAfterWrite方法配置,写入后开始计时过期,示例:
    RCache<String, String> cache = redisson.getCache("myCache");
    cache.getConfig().setExpireAfterWrite(60, TimeUnit.SECONDS);
    
  • ExpireAfterRead:Redisson的RMapCache支持expireAfterAccess配置,这个方法会在条目被读取或写入时重置TTL,等同于ExpireAfterRead+ExpireAfterWrite的组合,示例:
    RMapCache<String, String> mapCache = redisson.getMapCache("myMapCache");
    mapCache.getConfig().setExpireAfterAccess(30, TimeUnit.MINUTES);
    
  • ExpireAfterUpdate:当条目被更新(覆盖写入)时,Redisson的过期时间会自动重置,不管是基于expireAfterWrite还是expireAfterAccess的配置,更新操作都会触发TTL的重新计算。

其他可选实现方案

  • Spring Cache + Redis:结合Spring缓存抽象与Redis实现,可通过自定义配置或扩展RedisCacheManager实现类似逻辑,比如利用Redis的PEXPIRE命令在读取或更新后动态调整过期时间。
  • Jedis + 自定义封装:Jedis本身无直接高层API支持,但可基于其基础命令自行封装逻辑,比如在读取缓存后调用expire重置TTL,更新后重新设置过期时间。

需要注意的是,这类基于访问的TTL机制依赖客户端层面的逻辑处理——Redis原生命令仅支持固定TTL或基于事件的过期,客户端需在每次读写操作后主动更新过期时间来实现对应行为。

内容的提问来源于stack exchange,提问作者Manoj Ramakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:45:28