java - write - spring cache




Gibt es eine Open-Source-Off-Heap-Cache-Lösung für Java? (5)

Diese Implementierung eines Java-Off-Heap-Caches verwendet direkten Speicher und bietet eine gute Leistung in einer leichtgewichtigen Java-Bibliothek:

https://github.com/snazy/ohc

Werfen Sie einen Blick auf den Benchmarking-Bereich für die Performance-Zahlen. Es ist unter Apache 2 lizenziert.

Gibt es eine Open-Source-Alternative für Terracotta BigMemory?

Tatsächlich habe ich nicht mal eine kommerzielle Alternative gefunden. Ich bin an einer reinen Java-Lösung interessiert, die innerhalb von JVM ohne jegliche JNI- und C-unterstützte Lösung funktioniert.


Ich entwickle eine Lösung, um viel schneller zu sein, aber ich würde nicht vorschlagen, dass Sie es gerade noch als einen Beweis des Konzepts in diesem Stadium verwenden.

http://vanillajava.blogspot.com/2011/09/new-contributors-to-hugecollections.html

Wenn Sie jedoch eine bestimmte Anforderung haben, ist es möglicherweise einfacher, sie selbst zu codieren, direkte ByteBuffer oder speicherprogrammierte Dateien zu verwenden.

z.B

// using native order speeds access for values longer than a byte.
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*1024).order(ByteOrder.nativeOrder());
// start at some location.
bb.position(0);
bb.put((byte) 1);
bb.putInt(myInt);
bb.putDouble(myDouble);

// to read back.
bb.position(0);
byte b = bb.get();
int i = bb.getInt();
double d = bb.getDouble();

Ähnliches können Sie für Speichermapped-Dateien tun. Memory-Mapped-Dateien zählen nicht zu Ihrem direkten Speicherlimit und belegen keinen Swap-Space.

Sind Sie sicher, dass BigMemory die Arbeit für Sie nicht erledigen wird?




Es gibt eine sehr gute Cache-Lösung namens MapDB (früher JDBM4). Es unterstützt HashMap und TreeMap aber es ist nur Anwendung eingebettet. Es unterstützt auch persistenten dateibasierten Cache.

Beispiel für Off-Heap-Cache:

DB db = DBMaker.newDirectMemoryDB().make();
ConcurrentNavigableMap<Integer, String> map = db.getTreeMap("MyCache");

Oder persistenter dateibasierter Cache:

DB db = DBMaker.newFileDB(new File("/home/collection.db")).closeOnJvmShutdown().make();
ConcurrentNavigableMap<Integer,String> map = db.getTreeMap("MyCache");






memory