我正在使用 ehcache(通过 Grails 插件)。将对象添加到缓存的方法要求键是可序列化的,因此典型的用法是:
def key = 22
def someObject = new Object();
cacheService.cache(key, true, someObject)
(布尔参数表示对象应该添加到分布式缓存还是本地缓存)
我的问题是我应该如何从值对象生成键,例如:
class Person implements Serializable {
String firstName
String lastName
Integer age
}
一种方法是提供 hashCode() 和 equals() 方法并使用 hashCode 作为键。在这种情况下,我不需要让 Person 类实现 Serializable。
或者,我可以简单地使用 Person 对象本身作为键。似乎我仍然需要提供 equals 和 hashCode 方法,但也需要实现 Serializable。但是,使用这种方法发生冲突的可能性似乎较小,因为 Person 只能等于 Person 的另一个实例。
我假设 ehcache 使用一个键的 equals() 方法来确定该键是否已经存在于缓存中,这个假设是否正确?
上面概述的任何一种方法本质上都比另一种更好,还是我没有考虑过另一种方法?
谢谢,唐