我使用@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秒。
答案 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。