什么是通过@Cachable填充的缓存中的键值

时间:2012-04-23 17:13:22

标签: spring caching ehcache

我有一个通过@Cacheable填充的缓存,如下所示

    @Cacheable(value = "accountGroupCache")
public List<Acc> getAccInfo(int groupId, String user)

我想知道这个缓存的键值对是什么?我正在使用ehcahe进行缓存。

1 个答案:

答案 0 :(得分:0)

密钥将基于getAccInfo()方法的参数。该值将是您的方法返回的List<Acc>

根据docs

  

28.3.1.1默认密钥生成

     

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

     
      
  • 如果没有给出参数,则返回0.
  •   
  • 如果只给出一个参数,则返回该实例。
  •   
  • 如果给出了更多的参数,则返回从所有参数的哈希计算出的密钥。
  •   

查看DefaultKeyGenerator的源代码,这就是它如何计算“从所有参数的哈希计算的密钥”:

    int hashCode = 17;
    for (Object object : params) {
        hashCode = 31 * hashCode + 
                          (object == null ? NULL_PARAM_KEY : object.hashCode());
    }