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