是否可以通过密钥为@Cacheable设置TTL?

时间:2019-06-19 03:46:16

标签: java spring caching redis configuration

我使用@Cacheable(name = "rates", key = "#car.name")

我可以为此缓存设置TTL吗? TTL是由car.name决定的吗?

例如

我想设置name = "rates" TTL 60秒 运行Java:

时间:0 car.name = 1,返回“ 11” 时间:30 car.name = 2,返回“ 22”

时间:60 car.name = 1钥匙应该消失了。
时间:90 car.name = 2键应该消失了。

,我想为多个名称设置多个TTL。

name = "rates2" TTL 90秒。

1 个答案:

答案 0 :(得分:0)

您不能@Cacheable是静态配置,而您想要的更多是动态方面的。请记住,Spring仅提供应该适合所有提供程序的抽象。您应该为不同的条目指定不同的区域,或者进行后台处理使需要失效的键失效。

静态配置时,生存时间设置是基于每个区域的。

如果您离开静态配置,则可以在插入条目时设置到期时间,但随后您将远离spring(一种大小适合所有人记住的大小),并输入缓存提供程序的范围(可以是Redis) ,Hazelcast,Ehcache,infinispan,并且每个合约都有不同的合同

以下是Hazelcast的IMap接口示例合同:

IMap::put(Key, Value, TTL, TimeUnit) 

但这与春天无关。

使用Spring意味着您可以执行以下操作:

    @Cacheable(name="floatingRates")
List<Rate> floatingRates;
    @Cacheable(name="fixedRates")
List<Rate> fixedRates;

,然后为每一个定义TTL。