2009-07-27 7 views
6

Estoy haciendo una aplicación Java EE, y estoy en un punto donde he llegado a la conclusión de que necesito un caché para mis objetos.Elija una implementación de la memoria caché o distribuya la suya propia?

Mis requisitos actuales no son mucho más complicados que algún tipo de almacenamiento de clave-valor, posiblemente algo que pueda manejar un árbol. Sería tentador escribir una simple clase estática/singleton personalizada que contenga uno o más mapas. Pero, dado que hay varias implementaciones que hacen más o menos lo mismo (me viene a la memoria Memcached), comencé a preguntarme si debe haber algún valor agregado en el uso de Memcached, en lugar de solo mi propia implementación.

Así que, estoy pidiendo ideas sobre esto: ¿por qué debería recoger un caché listo, cuando puedo hacer mis propios datos estáticos? Y viceversa; ¿Por qué debería escribir una clase estática cuando puedo recoger un caché listo?

Respuesta

6

Para muchos casos de gráficos de objetos complejos que tenía suficientemente buena actuación con un sola línea

new MapMaker().weakKeys().makeMap(); 

Esto crea un mapa mediante Google collections, la puede utilizar como una memoria caché de objetos complejos.

Dado que las teclas son débiles y, finalmente, salen del alcance, es poco probable que esto ocasione problemas de memoria.

Así que diría que para casos simples: no se moleste con la "carga cognitiva" de un caché distribuido. Problemas de serialización, latencia, etc. no querrá manejarlos.

+0

Este MapMaker es algo nuevo para mí. Debo echarle un vistazo. ¡Gracias por el consejo! –

9

Hay muchas implementaciones de caché, tanto de código abierto como comercial. Hay muchos problemas con respecto a escribir un caché correcto: tiempo para abandonar los objetos, políticas de desalojo, persistencia, administración de memoria y más, así que no iniciaría uno propio (¿por qué reinventar la rueda?)

echar un vistazo a una de las siguientes implementaciones:

Ver más en http://java-source.net/open-source/cache-solutions

+0

Entonces, suponiendo que tengo una aplicación de VM única que pueda incluir todos los datos que deseo en la memoria caché a la vez, ¿diría que las implementaciones listas tienen beneficios adicionales? Naturalmente, una vez que hay más máquinas virtuales, o no puedo ajustar todos los datos a la vez en la memoria caché, hay buenas razones para no reinventar la rueda. –

+2

Como ocurre con muchas cosas, parece que los implementadores de las bibliotecas de caché existentes solo han pensado en muchos de los problemas que se encontrarán.Probablemente deberías leer las descripciones de cada uno para que cuando surja un problema al codificar tu memoria caché lo reconozcas fácilmente y al menos una posible solución. –

3

"¿Por qué debería escribir una clase estática, cuando puede recoger un ready-made caché?"

Cuando no desea incluir dependencias de terceros en su proyecto y no hay mejor manera de aprender cómo escribir cachés.

Cuestiones relacionadas