SpringBoot + Ehcache之自定义Key生成策略

问题

在项目启用了ehcache缓存,但是某些方法使用缓存后不能正确的返回数据,抛出了类型转换异常,找了一番资料后发现是缓存的key生成策略问题,在此将此问题及解决办法记录一下。

spring cache缓存的key默认策略

spring cache缓存的key默认是通过KeyGenerator生成的,其默认生成策略如下:

  1. 如果方法没有参数,则使用0作为key。
  2. 如果只有一个参数的话则使用该参数作为key。 
  3. 如果参数多余一个的话则使用所有参数的hashCode作为key。

可以看出默认的key生成策略中并没有涉及方法名称和类,这就意味着如果我们有两个参数列表相同的方法,我们用相同的参数分别调用两个方法,当调用第二个方法的时候,spring cache将会返回缓存中的第一个方法的缓存值,因为他们的key是一样的。

下面我们看一段代码: 

example code

@CacheConfig(cacheNames = "default")
public class SampleService {
  @Cacheable
  public Model1 getModel1(Integer id) {
    return // ...
  }
  @Cacheable
  public Model2 getModel2(Integer id) {
    return // ...
  }
}

场景:当我们先调用了getModel1(1),ehcache就会将方法的返回结果以"1"为key放入缓存中,当我们再调用g

猜你喜欢

转载自blog.csdn.net/as4589sd/article/details/104151850