使用Spring Cache缓存一个大值并使用它来输出一个较小的值?

时间:2017-08-21 20:54:42

标签: java spring caching

我们的程序使用Spring Cache来存储调用方法30天后达到的值。有没有办法让它使用相同的缓存,如果该方法接收7天参数?

例如,假设我有一个方法可以调用从1到x的每个数字。我用x = 50调用该方法,此结果被缓存。我有没有办法让缓存操作,如果再次使用x = 25调用该方法,它只是使用x = 50缓存来查找结果?

1 个答案:

答案 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以获取一些示例。