java caching ehcache oscache

java - OSCache vs. EHCache



caching (10)

Nunca usé un caché como este antes. El problema es que quiero cargar más de 500,000 registros de una base de datos y seleccionar / filtrar rápidamente.

Estoy pensando en usar un caché, y encontré preliminarmente EHCache y OSCache , ¿alguna opinión?


A juzgar por su página de lanzamientos , OSCache no se ha mantenido activamente desde 2007. Esto no es algo bueno. EhCache, por otro lado, está en constante desarrollo. Por esa sola razón, elegiría EhCache.

Edición de noviembre de 2013: OSCache, como el resto de OpenSymphony, está muerto.


Ambos son proyectos bastante sólidos. Si tiene necesidades de caché bastante básicas, cualquiera de ellas probablemente funcionará tan bien como la otra.

También puede considerar realizar el filtrado en una consulta de base de datos si es factible. A menudo, usar una consulta ajustada que devuelve un conjunto de resultados más pequeño le dará un mejor rendimiento que cargar 500,000 filas en la memoria y luego filtrarlas.


De cualquier manera, recomiendo usarlos con Spring Modules. La memoria caché puede ser transparente para la aplicación, y las implementaciones de caché son fáciles de intercambiar. Además de OSCache y EHCache, Spring Modules también admite Gigaspaces y JBoss cache.

En cuanto a las comparaciones ... OSCache es más fácil de configurar EHCache tiene más opciones de configuración

Ambos son sólidos como una roca, ambos admiten caché de duplicación, ambos funcionan con Terracotta, ambos admiten caché en memoria y en disco.


Depende de tus necesidades Si está haciendo el trabajo en la memoria en una máquina, ehcache funcionará perfectamente, suponiendo que tiene suficiente RAM o un disco duro lo suficientemente rápido para que el desbordamiento no provoque paginación / agitación del disco. si encuentra que necesita lograr la escalabilidad, incluso a pesar de que esta operación en particular suceda mucho, entonces probablemente quiera hacer clustering. JGroups / TreeCache de JBoss respaldan esto, al igual que EHcache (creo), y sé que definitivamente funciona si usas Ehcache con terracota, que es una integración muy ingeniosa. Esta respuesta no habla directamente de los méritos de EHcache y OSCache, así que esta es la respuesta: EHcache parece tener la mayor inercia (solía ser el desarrollo predeterminado, conocido y activo, incluido un nuevo servidor de caché), y OSCache parecía (al menos en un punto) para tener un poco más de características, pero creo que con las opciones mencionadas anteriormente esas ventajas son discutibles / reemplazadas. Ah, la otra cosa que olvidé mencionar es que la transaccionalidad de los datos es importante, y sus requisitos refinarán la lista de opciones válidas.


Elija un caché que cumpla con JSR 107, que facilitará su trabajo cuando quiera migrar de una implementación a otra. Para ser específico sobre la cuestión, vaya a Ehcache, que es la solución de caché Java más popular y ampliamente utilizada. Estamos utilizando Ehcache extensamente y funciona para nosotros.



He usado oscache en varios proyectos de primavera con módulos de resorte, usando la configuración basada en AOP.

Hace poco busqué usar oscache + módulos de resorte en un proyecto de Spring 3.x, pero encontré que el almacenamiento en memoria caché basado en anotaciones de módulos de primavera no es compatible (ni siquiera con la horquilla).

Recientemente descubrí sobre este proyecto:

http://code.google.com/p/ehcache-spring-annotations/

Que admite Spring 3.x con caché basado en anotaciones declarativas usando ehcache.


Otras respuestas discuten los pros / contras de los cachés; pero me pregunto si realmente se beneficia de la memoria caché. No está del todo claro qué es lo que planeas hacer aquí, y por qué un caché sería beneficioso: si tienes el conjunto de datos a tu disposición, simplemente acéptalo. La memoria caché solo ayuda a reutilizar cosas entre tareas que de otro modo serían independientes. Si esto es lo que está haciendo, sí, el almacenamiento en caché puede ayudar. Pero si es una gran tarea que puede llevar a lo largo de su conjunto de datos, el almacenamiento en caché no agregaría ningún valor.


Principalmente uso EhCache porque solía ser el proveedor de caché predeterminado para Hibernate. Hay una lista de soluciones de almacenamiento en caché en Java-Source.net .

Solía ​​tener un enlace que comparaba las principales soluciones de almacenamiento en caché. Si lo encuentro, actualizaré esta respuesta.


OSCache está prácticamente muerto, ya que fue abandonado hace unos años. Puede echar un vistazo a Cacheonix, se ha desarrollado activamente y acabamos de lanzar v.2.2.2 con soporte para el almacenamiento en caché en el nivel web. Soy un committer para que pueda comunicarse si tiene alguna pregunta.