Я использую 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 () ключа, чтобы определить, существует ли этот ключ в кэше, верно ли это предположение?
Является ли один из подходов, описанных выше, по сути лучше, чем другой, или есть другой подход, который я не рассматривал?
Спасибо,
Дон