¿Cuál es la mejor solución de código abierto para la memoria caché de Java?

No he probado la memoria directa. En mi experiencia (en Etsy, LinkedIn y Netflix), Memcached funciona bien. Sin embargo, necesita saber un poco sobre la asignación de la losa.

http://dom.as/2008/12/25/memcach…

Puede utilizar el cliente java SpyMemcached. Es bastante sencillo.

También podría implementar esto usted mismo:
Si eres nuevo en NIO, visita http://www.cs.brown.edu/courses/…. Si NIO es demasiado pesado para usted, use una biblioteca como Mina o Netty.

Hay una sección sobre buffers directos. Es una introducción bastante suave a Java NIO y te hará dominar rápidamente.

Por lo tanto, podrá implementar un caché basado en NIO con un esfuerzo moderado. Deberá mantener un índice de clave que comprenda la LFU en la memoria de almacenamiento dinámico de Java, pero el valor de almacenamiento estaría fuera de java-heap.

No sé qué significa FIFO con respecto al almacenamiento en caché.

De las 2 opciones que presento anteriormente, creo que Memcached será la opción más fácil para usted. Una vez más, nunca he probado el proyecto de memoria directa de la incubadora de apache, así que no puedo hablar con él.

Para propósitos de integridad, Ehcache (una cuarta opción gratuita) puede admitir memoria fuera de java a través de un conector a “Big Memory”. Tienes que pagar por la extensión de Big Memory sin embargo!

He estado jugando con MapDB y parece bastante sólido:

MapDB – MapDB

Todavía tengo que empujar sus límites aunque más allá de unos pocos cientos de megabytes, pero en teoría, puede soportar mucho más. El hecho de que implemente la API de colecciones hace que sea muy fácil de usar.

No sé nada acerca de DirectMemory, pero tuvimos cierto éxito (y mucha diversión) al usar una instancia de Redis local, serializando objetos Java de un lado a otro con Kryo para la eficiencia de espacio / tiempo:

http://redis.io
http://code.google.com/p/kryo

Para lo que vale, esto equivalía a un BigMemory de un hombre pobre (literalmente, no teníamos fondos), suficiente para nuestros requisitos.

Puedes usar el módulo “buffer” en Netty desde la versión 4+ para crear tu propio caché. Soporta memoria directa:
http://netty.io/4.0/api/io/netty
https://github.com/netty/netty/t
http://netty.io/wiki/new-and-not…

Vale la pena mencionar que HugeCollections, mencionado por Hari Menon hace 5 años, ha avanzado mucho más desde entonces y ahora se conoce como Chronicle Map: OpenHFT / Chronicle-Map. Sin embargo, no es compatible con LRU (fuera de la caja) y FIFO (para FIFO, considere OpenHFT / Chronicle-Queue), pero como un simple almacén de valor-clave fuera de pila es la solución de código abierto más eficiente para Java ahora ( puntos de referencia)

Si está interesado en una biblioteca java personalizable con poca sobrecarga, puede echar un vistazo a:
snazy / ohc

Esta implementación de caché java off-heap se usa en Apache Cassandra y es muy rápida. Pero es más una biblioteca que un sistema de almacenamiento en caché independiente. Para el último, es posible que desee considerar Apache Geode (incubación) o Apache Ignite

No pude probarlo en producción o en conjuntos de datos reales, pero la biblioteca HugeCollections parecía ser buena cuando jugaba con ella:

http://code.google.com/p/vanilla

Ahora tienes a Apache Ignite.

Apache Ignite

Gracias a GridGain que lo donó.

He estado buscando en BigCache ( http://bigcache.org/site/ ) pero no he tenido la oportunidad de examinarlo contra otros cachés que no son de la pila.

Intente usar Inseguro o ByteBuffer como se menciona en: http://stackoverflow.com/a/30027

Ehcache podría ser útil.

Documentación Ehcache 2.8

Es compatible con el tipo de almacenamiento en caché y LRU.

Probado y probado en un sistema de cálculo de riesgo muy estable en un banco de inversión.