2016-05-29 4 views
0

Ich bin neu in Spring Cache und mit Ehcache als Spring Cache-Implementierung.
Ich möchte über die folgenden Muster wissen: welcher ist besser und warum?Spring Cache, wie soll ich die Caches und Schlüssel entwerfen?

Muster 1: viele verschiedene Klassen verwenden den gleichen Cache mit unterschiedlichen Schlüsselpräfixen.

@Cacheable(cacheNames = "myCache", key = "'user:'+#id") 
public User findOne(int id) { 
    return... 
} 

@Cacheable(cacheNames = "myCache", key = "'post:'+#id") 
public Post findOne(int id) { 
    return... 
} 

Muster 2: Jede Klasse hat einen eigenen Cache.

@Cacheable(cacheNames = "users", key = "#id") 
public User findOne(int id) { 
    return... 
} 
@Cacheable(cacheNames = "posts", key = "#id") 
public Post findOne(int id) { 
    return... 
} 

Mit Muster 2, muss ich viele <cache/> in meinem ehcache.xml konfigurieren.
Ich weiß nicht, ob Cache eine schwergewichtige Komponente ist oder nicht?
Erstellen viele Caches schädlich für die Leistung?

+0

Tun Sie auch nicht. Offenbar versuchen Sie, das Second-Level-Caching Ihres JPA-Anbieters zu umgehen. Ich würde dringend empfehlen, das anstelle von Spring Caching zu verwenden. –

+0

@ M.Deinum, ich weiß, die obigen Beispiele sind nicht geeignet, wenn JPA mit dem Second-Level-Caching verwendet wird. Sie können davon ausgehen, dass die oben genannten Methoden mehr logische Operationen haben und nicht nur Aufrufe an JPA haben. Und der Rückgabewert darf keine JPA-Entität sein. – xzchaoo

Antwort

0

Die zweite Lösung sieht effektiver und nachvollziehbarer und nicht fehleranfällig aus.

In einigen Datenbanken können generierte IDs für verschiedene Tabellen Konflikt sein. Bei der ersten Lösung haben Sie möglicherweise Probleme, wenn einer der Posts dieselbe ID wie einer der Benutzer hat. In dieser Version benötigen Sie keine Problemumgehungen wie in der ersten Lösung.

Zweitens möchten Sie möglicherweise verschiedene Attribute für verschiedene Arten von Objekten haben. Zum Beispiel; timeToLiveSeconds. Benutzerinformationen können sich häufiger ändern als Posts. (z.B. Anzahl von Einträgen für Benutzer usw.)

Dritte, maxEntriesLocalHeap. Die neuesten Objekte aus verschiedenen Typen im Heap zu speichern, erscheint als eine bessere Option.

+0

Hallo, danke, ich denke auch, dass Muster 2 in den meisten Fällen besser ist. Und die letzte Frage: Mit Muster 2 muss ich viele in meiner ehcache.xml konfigurieren. Ich weiß nicht, ob Cache (Ehcache-Implementierung) eine schwergewichtige Komponente ist oder nicht? Erstellen viele Caches schädlich für die Leistung? – xzchaoo

Verwandte Themen