Ich suche nach einem einfachen Java-In-Memory-Cache mit guter Parallelität (daher ist LinkedHashMap nicht gut genug), der regelmäßig auf die Festplatte serialisiert werden kann.
Eine Funktion, die ich brauche, die sich jedoch als schwer zu finden erwiesen hat, ist die Möglichkeit, ein Objekt zu "betrachten". Damit meine ich das Abrufen eines Objekts aus dem Cache, ohne dass der Cache das Objekt länger als sonst festhält.
Update: Eine zusätzliche Anforderung, die ich nicht erwähnt habe, ist, dass ich in der Lage sein muss, die zwischengespeicherten Objekte (sie enthalten Float-Arrays) direkt zu ändern.
Kann jemand irgendwelche Empfehlungen geben?
Antworten:
Da diese Frage ursprünglich gestellt wurde, enthält die Guava-Bibliothek von Google jetzt einen leistungsstarken und flexiblen Cache. Ich würde empfehlen, dies zu verwenden.
quelle
Ehcache ist eine ziemlich gute Lösung dafür und bietet eine Möglichkeit, einen Blick darauf zu werfen ( getQuiet () ist die Methode), sodass der Leerlaufzeitstempel nicht aktualisiert wird. Intern wird Ehcache mit einer Reihe von Karten implementiert, ähnlich wie ConcurrentHashMap, sodass es ähnliche Vorteile für die Parallelität bietet.
quelle
Wenn Sie etwas Einfaches brauchen, würde dies zur Rechnung passen?
Es wird nicht auf der Festplatte gespeichert, aber Sie sagten, Sie wollten einfach ...
Links:
(Wie Adam kommentierte, hat das Synchronisieren einer Karte einen Leistungseinbruch. Nicht zu sagen, dass die Idee keine Haare hat, aber als schnelle und schmutzige Lösung ausreichen würde.)
quelle
ConcurrentHashMap<WeakReference<T>>
. docs.oracle.com/javase/7/docs/api/java/lang/ref/…Eine weitere Option für einen speicherinternen Java-Cache ist cache2k . Die In-Memory-Leistung ist EHCache und Google Guava überlegen (siehe Seite mit den Cache2k-Benchmarks) .
Das Verwendungsmuster ähnelt anderen Caches. Hier ist ein Beispiel:
Wenn Sie Google Guava als Abhängigkeit haben, ist das Ausprobieren des Guaven-Cache möglicherweise eine gute Alternative.
quelle
Sie können einfach imcache verwenden . Ein Beispielcode ist unten.
quelle
Versuche dies:
quelle
public static SimpleCacheManager getInstance() {
solltepublic synchronized static SimpleCacheManager getInstance() {
sonstif (instance == null) {
nicht threadsicher sein. In diesem Fall können Sie das MonitorobjektVersuchen Sie es
@Cacheable
unter jcabi-Aspekten . Mit einer einzigen Anmerkung können Sie das gesamte Methodenergebnis im Speicher zwischenspeichern:Lesen Sie auch diesen Artikel: http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html
quelle
Wie wäre es damit: https://commons.apache.org/proper/commons-jcs/ (auf neue Adresse aktualisiert, da JCS jetzt in Apache Commons ist)
quelle
Versuchen Sie es mit Ehcache ? Sie können damit Ihre eigenen Caching-Ablaufalgorithmen einbinden, um Ihre Peek-Funktionalität zu steuern.
Sie können auf Festplatte, Datenbank, in einem Cluster usw. serialisieren.
quelle