NCache é um cache distribuído na memória para .NET. Mas também suporta Java graças ao seu cliente 100% nativo e integrações de terceiros. Vamos fazer um rápido tour pelo NCache cliente Java e duas de suas integrações de terceiros para aplicativos Java.
Operação básica de cache com cliente Java
Depois 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 } |
Com o cliente Java, temos mais operações de cache. Além de adicionar e recuperar um único item, temos operações em massa para adicionar, recuperar, atualizar e excluir itens; e uma API assíncrona. Para obter mais detalhes sobre operações de cache mais avançadas, verifique Operações CRUD: uma visão geral. Também podemos encontrar exemplos de Java nesse guia.
- NCache Adicionar ao carrinho
- Configurar objetos e regiões que podem ser armazenados em cache
- Guia JCache
Além disso, dentro de nossos aplicativos Java, podemos usar o Funcionalidade de consulta SQL e estratégias de indexação para recuperar e excluir entradas em cache usando uma sintaxe semelhante a SQL.
Com essas operações de cache, escrevemos nosso próprio mecanismo de cache dentro de nossos aplicativos Java. Mas com NCache, podemos tirar proveito de sua integração de terceiros existente. Vamos dar uma olhada em dois deles.
NCache como Cache de segundo nível do Hibernate
Hibernate é uma ferramenta de mapeamento objeto-relacional para Java. Provavelmente, não precisa de muita introdução já que é uma ferramenta bastante difundida no mundo Java.
Para evitar idas e vindas excessivas a um banco de dados, o Hibernate usa diferentes mecanismos de cache: caches de primeiro e segundo nível. E o Hibernate faz fallback entre eles ao recuperar objetos do banco de dados.
O cache de primeiro nível é um cache por sessão. É o primeiro cache que o Hibernate verifica ao carregar objetos. Ao contrário do cache de primeiro nível, o cache de segundo nível é opcional. E está disponível para todas as sessões.
O Hibernate não fornece nenhuma implementação para o cache de segundo nível. Em vez disso, temos que confiar em provedores de cache terceirizados. NCache funciona como um cache de segundo nível.
Podemos fazer NCache funcionar como um provedor de cache de segundo nível do Hibernate por meio de arquivos de configuração sem alterar nosso código de produção.
O cache de segundo nível é desabilitado por padrão. Para habilitá-lo e usar NCache como um cache de segundo nível, temos que configurá-lo no arquivo de configuração do Hibernate. Por exemplo, este é um hibernate.cfg.xml
arquivo,
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 provedor de segundo nível
NCacheHibernate.xml
.
O Hibernate usa regiões para agrupar objetos sob um nome. Com NCache, podemos ter instâncias de cache separadas por região ou uma única instância de cache para várias regiões. Até podemos configurar cada região com diferentes NCache recursos de cache. Também especificamos todas essas configurações dentro do 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> |
- NCache Adicionar ao carrinho
- Configurar objetos e regiões que podem ser armazenados em cache
- Guia JCache
Para mais detalhes sobre o NCacheHibernate.xml
Verificação de arquivo Configurar objetos e regiões que podem ser armazenados em cache.
Embora habilitemos o cache de segundo nível, o Hibernate não armazena objetos em cache por padrão. Temos que marcar nossos objetos como armazenáveis em cache por meio de anotações ou arquivos de mapeamento. Por exemplo, vamos anotar um Product
classe,
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; } } |
É assim que podemos usar NCache como um cache Hibernate de segundo nível. Além disso, podemos usar NCache para armazenar em cache os resultados da consulta. Podemos melhorar o desempenho geral de nossos aplicativos armazenando em cache o resultado de consultas grandes, complexas e frequentes. Para aprender a usar NCache para cache de consulta com Hibernate, verifique Usar cache de consulta. Precisamos de pequenas alterações em nosso arquivo de configuração do Hibernate e em nossas consultas ao cache.
NCache Integração Primavera
NCache integra-se com o framework Spring também. O framework Spring é um framework de aplicação e inversão de container de controle para a plataforma Java. podemos ligar NCache no módulo de cache do Spring, tornando-o escalável e distribuído.
Quando nós usamos NCache com o Spring, descarregamos nosso banco de dados reduzindo o número de viagens do banco de dados para atender aos dados, proporcionando melhor desempenho.
Para começar a usar NCache com Spring, precisamos anotar nossa classe de configuração. Assim,
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; } } |
Em vez de usar anotações, também podemos usar um arquivo XML. Embora seja melhor usar anotações, pois podemos encontrar erros de tipo em tempo de compilação.
- NCache Adicionar ao carrinho
- Configurar objetos e regiões que podem ser armazenados em cache
- Guia JCache
Depois de alterar a configuração do Spring por meio de anotações ou de um arquivo XML, precisamos configurar os caches reais. Dentro de ncache-spring.xml
arquivo, definimos nossas instâncias de cache com suas propriedades como expiração e política de despejo. Por exemplo,
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> |
Depois de configurar nosso aplicativo Spring e habilitar o cache, a próxima etapa é anotar os métodos que queremos armazenar em cache. Por exemplo, para armazenar em cache um serviço que chamamos de um controlador de API ou outros serviços em nosso aplicativo, podemos escrever,
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"; } } |
Com todas essas etapas, estamos prontos para usar NCache com Primavera.
Para obter mais detalhes sobre a configuração NCache com Primavera, verifique Configurando aplicativos para uso NCache como provedor de Spring Caching.
Conclusão
É assim que podemos usar o NCache Cliente Java para suportar operações básicas de cache. podemos integrar NCache com Hibernate e Spring Framework apenas com configuração e pequenas alterações de codificação.
Além do Hibernate e do Spring, NCache também suporta API JCache. Podemos usar NCache em nosso aplicativo JCache e usar a mesma API JCache com uma solução distribuída. Para aprender a integrar NCache com JCache, visite Guia JCache.
E para aplicativos híbridos com back-end Java e .NET, NCache suporta tipos de dados portáteis. Podemos usar NCache para compartilhar dados entre os aplicativos back-end Java e .NET. Por exemplo, com tipos de dados portáteis, podemos implementar um Armazenamento JSON com NCache compartilhamento de dados entre dois aplicativos .NET e Java.
Se você deseja se beneficiar de uma solução de cache distribuída, escalável e de alto desempenho em seus aplicativos Java, forneça NCache uma tentativa.