Grails缓存插件的自定义缓存键有以下四个元素:
grails.plugin.cache.CustomCacheKeyGenerator$CacheKey {
final String targetClassName;
final String targetMethodName;
final int targetObjectHashCode;
final Object simpleKey;
}
完整的来源可用here
我需要了解为什么我们将 targetObjectHashCode 作为密钥的一部分?
我之所以这样问是因为它在使用ehcache(启用了 diskPersistent )时会导致缓存未命中。
在大多数情况下,目标对象是DAO;他们不会实现 hashCode()。现在每次JVM重新启动时,从磁盘加载的所有元素都会有缓存未命中,因为目标对象的哈希码会发生变化。