NCache es un almacenamiento en caché distribuido en memoria para .NET. Pero también soporta Java gracias a su cliente 100% nativo e integraciones de terceros. Hagamos un recorrido rápido por el NCache Cliente Java y dos de sus integraciones de terceros para aplicaciones Java.
Operación básica de almacenamiento en caché con Java Client
Después de instalar NCache,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
try { // After having NCache up and running... // Connect to cache String cacheName = "demoCache"; Cache cache = CacheManager.getCache(cacheName); // Cache a product Product product = buildOrRetrieveProductToCache(); String key = "Product:" + product.getProductID(); cache.add(key, product); // Later in another part of our code... // Retrieve cached product Product foundProduct = cache.get(key, Product.class); if (foundProduct != null) { // Do something with the cached product here } else { // No product was found } } catch (OperationFailedException ex) { // Handle NCache-specific exceptions, like connection failures, here } catch (Exception ex) { // Handle generic exceptions, like IllegalArgumentException, here } |
Con el cliente Java, tenemos más operaciones de almacenamiento en caché. Además de agregar y recuperar un solo elemento, tenemos operaciones masivas para agregar, recuperar, actualizar y eliminar elementos; y una API asíncrona. Para obtener más detalles sobre operaciones de almacenamiento en caché más avanzadas, consulte Operaciones CRUD: una descripción general. También podemos encontrar ejemplos de Java en esa guía.
Además, dentro de nuestras aplicaciones Java, podemos usar el Funcionalidad de consultas SQL y estrategias de indexación para recuperar y eliminar entradas almacenadas en caché utilizando una sintaxis similar a SQL.
Con estas operaciones de almacenamiento en caché, escribimos nuestro propio mecanismo de almacenamiento en caché dentro de nuestras aplicaciones Java. Pero con NCache, podemos aprovechar su integración de terceros existente. Echemos un vistazo a dos de ellos.
NCache como caché de segundo nivel de Hibernate
Hibernate es una herramienta de mapeo relacional de objetos para Java. Probablemente, no necesita demasiada presentación ya que es una herramienta muy extendida en el mundo Java.
Para evitar viajes de ida y vuelta excesivos a una base de datos, Hibernate utiliza diferentes mecanismos de almacenamiento en caché: cachés de primer y segundo nivel. E Hibernate retrocede entre ellos al recuperar objetos de la base de datos.
El caché de primer nivel es un caché por sesión. Es el primer caché que Hibernate comprueba al cargar objetos. A diferencia del caché de primer nivel, el caché de segundo nivel es opcional. Y está disponible para todas las sesiones.
Hibernate no proporciona ninguna implementación para el caché de segundo nivel. En su lugar, tenemos que confiar en proveedores de almacenamiento en caché de terceros. NCache funciona como un caché de segundo nivel.
Podemos hacer NCache trabajar como un proveedor de caché de segundo nivel de Hibernate a través de archivos de configuración sin cambiar nuestro código de producción.
La memoria caché de segundo nivel está deshabilitada de forma predeterminada. Para habilitarlo y utilizar NCache como caché de segundo nivel, tenemos que configurarlo en el archivo de configuración de Hibernate. Por ejemplo, este es un hibernate.cfg.xml
archivo,
1 2 3 4 5 6 7 8 9 10 11 |
<hibernate-configuration> <session-factory> <!-- It enables Hibernate second-level cache --><!-- It enables Hibernate second-level cache --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- It configures NCache as a second-level cache provider, for Hibernate 3.6 and above ---> <property name="hibernate.cache.region.factory_class">JCacheRegionFactory</property> <!-- It's NCache applicaton identifier --> <property name="ncache.application_id">myapp</property><!-- It configures NCache as a second-level cache provider, for Hibernate 3.6 and above ---> JCacheRegionFactory </session-factory> </hibernate-configuration> |
NCache como proveedor de segundo nivel
NCacheHibernate.xml
.
Hibernate usa regiones para agrupar objetos bajo un nombre. Con NCache, podemos tener instancias de caché separadas por región o una única instancia de caché para varias regiones. Incluso podemos configurar cada región con diferentes NCache características de almacenamiento en caché. También especificamos todas estas configuraciones dentro del NCacheHibernate.xml
1 2 3 4 5 6 7 8 |
<configuration> <application-config application-id="myapp" enable-cache-exception="true" default-region-name="DefaultRegion" key-case-sensitivity="false"> <cache-regions> <region name="MyCustomRegion" cache-name="myPartitionedcache" priority="default" expiration-type="sliding" expiration-period="8"/> <region name="DefaultRegion" cache-name="demoCache" priority="default" expiration-type="none" expiration-period="0" /> </cache-regions> </application-config> </configuration> |
Para más detalles sobre la NCacheHibernate.xml
chequeo de archivo Configurar regiones y objetos almacenables en caché.
Aunque habilitamos el almacenamiento en caché de segundo nivel, Hibernate no almacena objetos en caché de forma predeterminada. Tenemos que marcar nuestros objetos como cacheables a través de anotaciones o archivos de mapeo. Por ejemplo, anotemos un Product
clase,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@Entity @Table(name = "Products") @Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Product { @Id @GeneratedValue @Column(name = "ProductID") private int ProductID; @Column(name = "Name") private String Name; public Product() {} public int getProductID() { return ProductID; } public void setProductID(int productID) { this.ProductID = productID; } public String getName() { return Name; } public void setName(String name) { this.Name = name; } } |
Así es como podemos usar NCache como caché de Hibernate de segundo nivel. También, podemos usar NCache para almacenar en caché los resultados de la consulta. Podemos mejorar el rendimiento general de nuestras aplicaciones almacenando en caché el resultado de consultas grandes, complejas y frecuentes. Para aprender a usar NCache para el almacenamiento en caché de consultas con Hibernate, marque Usar el almacenamiento en caché de consultas. Necesitamos pequeños cambios en nuestro archivo de configuración de Hibernate y en nuestras consultas al caché.
NCache Integración de primavera
NCache se integra con el marco Spring también. Spring Framework es un marco de aplicación y un contenedor de inversión de control para la plataforma Java. podemos enchufar NCache en el módulo de almacenamiento en caché Spring, haciéndolo escalable y distribuido.
Cuando usamos NCache con Spring, descargamos nuestra base de datos al reducir la cantidad de viajes de la base de datos para servir datos, lo que nos brinda un mejor rendimiento.
Para empezar a usar NCache con Spring, necesitamos anotar nuestra clase de configuración. Como esto,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Configuration @EnableCaching public class CachingConfiguration { @Bean public CacheManager cacheManager() { SpringConfigurationManager springConfigurationManager = new SpringConfigurationManager(); URL resource = getClass().getClassLoader().getResource("ncache-spring.xml"); springConfigurationManager.setConfigFile(resource.getPath()); NCacheCacheManager cacheManager = new NCacheCacheManager(); cacheManager.setSpringConfigurationManager(springConfigurationManager); return cacheManager; } } |
En lugar de usar anotaciones, también podemos usar un archivo XML. Aunque, es mejor que usemos anotaciones ya que podemos encontrar errores de tipo en tiempo de compilación.
Después de cambiar la configuración de Spring mediante anotaciones o un archivo XML, debemos configurar los cachés reales. Dentro de ncache-spring.xml
archivo, definimos nuestras instancias de caché con sus propiedades como política de caducidad y desalojo. Por ejemplo,
1 2 3 4 5 6 |
<application-config default-cache-name="default"> <caches> <cache name="ProductsCache" ncache-instance="demoCache" priority="normal" expiration-type="absolute" expiration-period="10"/> </caches> </application-config> |
Después de configurar nuestra aplicación Spring y habilitar el almacenamiento en caché, el siguiente paso es anotar los métodos que queremos almacenar en caché. Por ejemplo, para almacenar en caché un servicio que llamamos desde un controlador API u otros servicios en nuestra aplicación, podemos escribir,
1 2 3 4 5 6 7 8 9 10 11 12 |
@Service public class ProductService { @Cacheable("ProductsCache") public String getProductNameByCode(String code) { return retrieveProductNameFromDatastore(code); } private String retrieveProductNameFromDatastore(String code) { // Image a query to retrieve a product name from a database return "Any name"; } } |
Con todos estos pasos, estamos listos para usar NCache con Spring.
Para más detalles sobre la configuración NCache con resorte, comprobar Configuración de aplicaciones para usar NCache como proveedor de almacenamiento en caché de Spring.
Conclusión
Así es como podemos usar el NCache Cliente Java para admitir operaciones básicas de almacenamiento en caché. podemos integrar NCache con Hibernate y Spring Framework con solo configuración y cambios menores de codificación.
Además de Hibernate y Spring, NCache también es compatible con la API de JCache. Nosotros podemos usar NCache en nuestra aplicación JCache y use la misma API de JCache con una solución distribuida. Para aprender a integrar NCache con JCache, visite Guía de JCache.
Y para aplicaciones híbridas con back-end de Java y .NET, NCache admite tipos de datos portátiles. Nosotros podemos usar NCache para compartir datos entre las aplicaciones back-end de Java y .NET. Por ejemplo, con tipos de datos portátiles, podemos implementar un Almacenamiento JSON con NCache compartir datos entre dos aplicaciones .NET y Java.
Si desea beneficiarse de una solución de almacenamiento en caché distribuida, escalable y de alto rendimiento en sus aplicaciones Java, proporcione NCache un intento.