密钥的含义作为Cacheable注释的参数

时间:2016-03-06 08:57:04

标签: java spring caching spring-cache

我正在尝试使用Spring @Cacheable注释。

让我们看看:

@Cacheable(value = "employee", key = "#surname")
public Person findEmployeeBySurname(String firstName, String surname, int age) {

    return new Person(firstName, surname, age);

}

我是否正确,如果我添加2个姓氏相同的人,那么只有一个人会被保存在缓存中,并且该方法有时会返回错误的结果?

我应该何时指定此参数?

如果我没有明确指定它,spring如何创建密钥(据我所知,当我使用CasheEvict和CashPut注释时我应该知道它)?

1 个答案:

答案 0 :(得分:0)

JB Nizet是对的,显然是他链接到的文档!

  

35.3.1 @Cacheable annotation ...

     

默认密钥生成

     

由于缓存本质上是键值存储,因此每次调用一个   需要将缓存的方法转换为适合缓存的密钥   访问。开箱即用,缓存抽象使用简单   KeyGenerator基于以下算法:

If no params are given, return SimpleKey.EMPTY.
If only one param is given, return that instance.
If more the one param is given, return a SimpleKey containing all parameters.

这是三个案例中的最后一个对你的mehtods来说是重要的,没有缓存参数