Uso NCache como caché de datos Spring

NCache, como caché distribuido en memoria, extremadamente rápido y escalable, proporciona integración con Spring para aumentar el rendimiento de la aplicación al reducir los costosos viajes de datos.

Spring es un marco y contenedor de desarrollo orientado a aspectos y de inyección de dependencias livianos para Java. Le permite simplificar el desarrollo de su aplicación y conectar piezas reutilizables en su aplicación como NCache.

 

Por qué integrar su aplicación Spring con NCache?

Spring en sí reduce la complejidad general del desarrollo de Java al proporcionar cohesión y acoplamiento flexible, pero crea un alto tráfico en estas aplicaciones. Estas aplicaciones Spring de alto tráfico enfrentan un importante problema de escalabilidad. Por lo tanto, es fundamental contar con una caché distribuida en memoria que cumpla con sus requisitos de escalabilidad.

Aunque estas aplicaciones pueden ampliarse añadiendo más servidores a su granja de servidores, lamentablemente las bases de datos no pueden ampliarse para soportar cargas tan elevadas. Para estos escenarios, una caché distribuida es lo mejor para manejar la base de datos. escalabilidad problema.

Por lo tanto, la mejor opción es NCache. Es un proceso rápido, en memoria, tienda de valor clave caché distribuido, que ha implementado un módulo de almacenamiento en caché Spring, lo que hace que sus aplicaciones Spring sean escalables y distribuidas. Descarga su base de datos al reducir los costosos viajes a la base de datos que causan problemas de escalabilidad y proporciona un rendimiento más rápido.

 

Cómo configurar la aplicación Spring para usar NCache

NCache proporciona soporte de almacenamiento en caché Spring de las siguientes dos maneras:

  • A través de la Proveedor de almacenamiento en caché de primavera, NCache actúa como un administrador de caché para su aplicación Spring.
  • A través de la Proveedor de almacenamiento en caché JCache, NCache utiliza la función compatible de JCache.
 

Adición de dependencias

Para configurar su aplicación Spring, primero debe agregar todas las dependencias Maven requeridas que Spring y NCache proporcionar.

<dependency>
    <groupId>com.alachisoft.ncache</groupId>
    <artifactId>ncache-spring</artifactId>
    <version>x.x.x</version>
</dependency>
 

Configurar la aplicación Spring a través del proveedor de almacenamiento en caché Spring

Después de agregar estas dependencias, defina beans en su aplicación Spring, a través de la definición de bean basada en Java o XML.

Definición de Bean basado en Java:
Para definir beans utilizando una definición basada en Java, debe agregar el @Frijol anotación en la clase CachingConfiguration, donde el método setConfigFile especificará la ruta a su ncache-archivo spring.xml. Para obtener información detallada, consulte Bean basado en Java Definición.

@Configuration
class CachingConfiguration {
    @Bean
    public CacheManager cacheManager() {
        String resource = Path.of(System.getenv("NCHOME"), "config/ncache-spring.xml").toString();

        SpringConfigurationManager springConfigurationManager = new SpringConfigurationManager();
        springConfigurationManager.setConfigFile(resource);

        NCacheCacheManager cacheManager = new NCacheCacheManager();
        cacheManager.setSpringConfigurationManager(springConfigurationManager);

        return cacheManager;
    }
}

Definición de Bean basada en XML:
Para definir beans utilizando una definición basada en XML, debe agregar un archivo XML que permita el almacenamiento en caché y especifique NCache como administrador de caché. Debe definir etiquetas Bean tanto para cacheManager como para NCacheAdministrador de configuración. Además, debe especificar las siguientes propiedades para cacheManager.

  • SpringConfigurationManager: Referencia a NCache bean del administrador de configuración.
  • ruta del archivo de registro: Ruta completa para los registros del administrador de caché.
<bean id="cacheManager" class="com.alachisoft.integrations.spring.NCacheCacheManager">
	<property name="springConfigurationManager" ref="NCacheConfigurationManager"/>
	<property name="logFilePath" value=" C:\Program Files\NCache\log-files\CustomerDBSpringLogs"/>
</bean>
<bean id="NCacheConfigurationManager" class="com.alachisoft.integrations.spring.configuration.SpringConfigurationManager">
        <property name="configFile" value="ncache-spring.xml">
</bean>

Para obtener más detalles, vaya a Definición de Bean basada en XML.

Además, debe configurar sus cachés en el ncache-archivo spring.xml para el NCache Centro de Gestión. Cada caché necesita su propia definición con su propio conjunto de propiedades en este archivo. Por ejemplo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application-config default-cache-name="books">
  <caches>
    <cache name="books" ncacheid-instance="democache" priority="normal" expiration-type="absolute" expiration-period="300"/>
  </caches>
</application-config>
 

Configurar aplicaciones Spring a través del proveedor de almacenamiento en caché JCache

Spring también admite proveedores de almacenamiento en caché compatibles con JCache donde puede usar JCache en su aplicación Spring con NCache. Primero, agregue las dependencias de Maven para Spring, NCachey JCache. Después de agregar dependencias, configure los cachés:

  • Añada spring.cache.cache-nombres etiqueta en el aplicación.propiedades archivo. El nombre de la caché debe ser el mismo que se configuró en el NCache Centro de Gestión.
  • Configura tu caché a través de la JCacheManagerPersonalizador clase que inicializa el caché en tiempo de ejecución con la configuración deseada.

Para más información, puede consultar nuestro Documentos de JCache Spring.

 

Identificación de métodos necesarios para ser almacenados en caché

Una vez que habilite el almacenamiento en caché a través de las dos configuraciones definidas anteriormente, el siguiente paso es vincular estos comportamientos de almacenamiento en caché a sus respectivos métodos para usar. NCache como proveedor de almacenamiento en caché para Spring.

Puede vincular comportamientos de almacenamiento en caché a sus métodos de dos maneras. uno ha terminado Almacenamiento en caché de anotaciones.

// BookController.java
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    // Get a Spring Service to save objects in the DB. This also caches them with 5min absolute (TTL) expiration.
    BookService service = context.getBean(BookService.class);
    service.save(new Book(18001, "The Second Machine Age", "Erik Brynjolfsson, Andrew McAfee", new Date(2014, 0, 20)));

    // Print all saved books details
    printBooks(service.listAll());

    // Use Spring Service to get a book from the DB. It actually comes from the cache
    Book foundBook = service.findBookByIsbn(18001);
    printBookDetails(foundBook);

    foundBook.setAuthor("New Author");
    Book UpdatedBook = service.update(foundBook);

    printBookDetails(UpdatedBook);
    context.close();
    System.exit(0);
    }

// BookService.java
@Service
class BookService {
    @Autowired
    private BookRepository repo;

    public List<Book> listAll() {
        return repo.findAll();
    }

    @CachePut(value = "demoCache", key = "#book.getISBN()")
    public Book save(Book book) { return repo.save(book); }

    @CachePut(value = "demoCache", key = "#book.getISBN()")
    public Book update(Book book) { return repo.save(book); }

    @Cacheable(value = "demoCache", key = "#id")
    public Book get(int id) {
        return repo.findById(id);
    }

    @Cacheable(value = "demoCache", key = "#isbn")
    public Book findBookByIsbn(long isbn) {
        return repo.findBookByIsbn(isbn);
    }

    @CacheEvict(value = "demoCache", allEntries = true)
    public void delete(int id) {
        repo.deleteById(id);
    }
}

Si no usa anotaciones, entonces Almacenamiento en caché declarativo basado en XML se puede usar donde puede especificar el método de destino y las directivas de almacenamiento en caché de forma externa.

<!-- the service we want to make cacheable -->
<bean id="bookService" class="x.y.service.BookService"/>
<!-- cache definitions -->
<cache:advice id="booksCacheAdvice" cache-manager="cacheManager">
    <cache:caching cache="demoCache">
        <cache:cacheable method="getBookNameByIsbn" key="#isbn"/>
        <cache:cache-evict method="loadBooks" all-entries="true"/>
    </cache:caching>
</cache:advice>

¿Qué hacer a continuación?

© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.