我们的程序使用Spring Cache来存储调用方法30天后达到的值。有没有办法让它使用相同的缓存,如果该方法接收7天参数?
例如,假设我有一个方法可以调用从1到x的每个数字。我用x = 50调用该方法,此结果被缓存。我有没有办法让缓存操作,如果再次使用x = 25调用该方法,它只是使用x = 50缓存来查找结果?
答案 0 :(得分:0)
这是否通常可能取决于您是否可以定义从输入映射的函数 - >想要的钥匙。默认情况下,Spring Cache将使用@Cacheable
带注释方法的方法参数作为缓存键。
KeyGenerator
的默认行为:
由于缓存本质上是键值存储,因此每次调用一个 需要将缓存的方法转换为适合缓存的密钥 访问。开箱即用,缓存抽象使用简单 KeyGenerator基于以下算法:
如果没有给出参数,则返回SimpleKey.EMPTY。如果只有一个参数 给定,返回该实例。如果给出更多的一个参数,则返回a SimpleKey包含所有参数。这种方法适用于大多数人 用例;只要参数具有自然键并且实现有效 hashCode()和equals()方法。如果不是这样的话那么 战略需要改变。
您可以使用几个选项来定义自己的自定义键,您可以自己实现KeyGenerator
,也可以使用spel
定义一个函数,将参数映射到您自己的键。 #39; d喜欢它使用。查看http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key以获取一些示例。