Spring @Cacheable Methoden mit Listen

8

Ich verwende den neuesten Ehcache in meiner Spring 4.1.4 Anwendung. Was ich habe ist:

   %Vor%

Was ich erreichen möchte, ist, dass Kontakte im Cache gespeichert werden, und wenn ich die Methode getContactList erneut aufruft, werden alle Kontakte, deren id bereits zwischengespeichert ist, aus dem Cache und den anderen abgerufen sollte normalerweise abgefragt und dann zwischengespeichert werden. Dieser Cache sollte dann die zwischengespeicherte Kontakteinheit aktualisieren, wenn sie aktualisiert wird.

Ich verwende einfach Spring JDBC und Ehcache, keine JPA und keinen Hibernate.

    
JavaDesire 04.07.2015, 12:41
quelle

1 Antwort

0

Glauben Sie nicht, dass das möglich ist. List<Integer> ist der Schlüssel gegen den Rückgabewert von getContactList wird in Cache gespeichert.

Wenn also die Liste der IDs, die in Ihr getContactList eingegeben werden, genau dieselben IDs wie in einem der vorherigen Aufrufe enthält, wird dies ein Cache-Fehltreffer sein, und Daten werden von der Datenbank abgerufen. (HINWEIS: Zwei Listen gelten als gleich, wenn sie genau die gleichen Elemente und in der gleichen Reihenfolge enthalten)

Eine Möglichkeit besteht darin, Ihre Methode getContactList(List<Integer> contactIdList) auf getContact(Integer id) zu ändern - in diesem Fall kann es eine Weile dauern, bis der Cache erstellt wurde, aber sobald sich ein Kontakt für eine bestimmte ID im Cache befindet, wird die DB nicht verwendet. holen Sie es in zukünftigen Anrufen.

Obwohl nicht elegant, aber eine andere Möglichkeit ist das manuelle Caching in getContactList method.

    
Wand Maker 04.07.2015 14:00
quelle

Tags und Links