Ich verwende ehcache (über das Grails-Plugin). Die Methode, die Objekte zum Cache hinzufügt, erfordert, dass die Schlüssel serialisierbar sind, so dass eine typische Verwendung sein würde:
def key = 22
def someObject = new Object();
cacheService.cache(key, true, someObject)
(Der boolesche Parameter gibt an, ob das Objekt einem verteilten oder lokalen Cache hinzugefügt werden soll)
Meine Frage ist, wie ich über die Generierung von Schlüsseln aus Wertobjekten wie gehen sollte:
class Person implements Serializable {
String firstName
String lastName
Integer age
}
Ein Ansatz wäre, eine hashCode()- und eine equals()-Methode bereitzustellen und den hashCode als Schlüssel zu verwenden. In diesem Fall müsste ich die Klasse Person nicht Serializable implementieren.
Alternativ könnte ich auch einfach das Person-Objekt selbst als Schlüssel verwenden. Es scheint, dass ich immer noch die Methoden equals und hashCode bereitstellen müsste, aber auch Serializable implementieren müsste. Allerdings scheint die Wahrscheinlichkeit von Kollisionen bei diesem Ansatz geringer zu sein, da eine Person nur gleich einer anderen Instanz von Person sein kann.
Ich nehme an, dass ehcache die equals()-Methode eines Schlüssels verwendet, um festzustellen, ob dieser Schlüssel bereits im Cache vorhanden ist. Ist diese Annahme richtig?
Ist einer der oben beschriebenen Ansätze per se besser als der andere, oder gibt es einen anderen Ansatz, den ich nicht in Betracht gezogen habe?
Danke! Don