Verwenden Sie die NCache als Spring Data Cache

NCacheAls extrem schneller und skalierbarer verteilter In-Memory-Cache ermöglicht es die Integration mit Spring, um die Anwendungsleistung durch Reduzierung teurer Datenfahrten zu steigern.

Spring ist ein leichter Abhängigkeitsinjektions- und aspektorientierter Entwicklungscontainer und Framework für Java. Damit können Sie Ihre Anwendungsentwicklung vereinfachen und wiederverwendbare Teile in Ihre Anwendung integrieren NCache.

 

Warum integrieren Sie Ihre Spring-Anwendung mit NCache?

Spring selbst reduziert die Gesamtkomplexität der Java-Entwicklung durch die Bereitstellung von Kohäsion und loser Kopplung, verursacht jedoch einen hohen Datenverkehr in diesen Anwendungen. Diese Spring-Anwendungen mit hohem Datenverkehr stehen vor einem erheblichen Skalierbarkeitsproblem. Daher ist ein verteilter In-Memory-Cache, der ihre Skalierbarkeitsanforderungen erfüllt, von entscheidender Bedeutung.

Obwohl diese Anwendungen durch das Hinzufügen weiterer Server zu ihrer Serverfarm skaliert werden können, können Datenbanken leider nicht skaliert werden, um solch hohe Lasten zu bewältigen. Für diese Szenarien eignet sich ein verteilter Cache am besten zur Verwaltung der Datenbank Skalierbarkeit Problem.

Daher ist die beste Option NCache. Es ist ein schnelles, speicherinternes, Schlüsselwertspeicher Distributed Cache, der ein Spring-Caching-Modul implementiert hat, das Ihre Spring-Anwendungen skalierbar und verteilt macht. Es entlastet Ihre Datenbank, indem es die teuren Datenbankfahrten reduziert, die Skalierbarkeitsprobleme verursachen, und sorgt für eine schnellere Leistung.

 

So konfigurieren Sie die zu verwendende Spring-Anwendung NCache

NCache bietet Spring-Caching-Unterstützung auf die folgenden zwei Arten:

  • Durch die Spring-Caching-Anbieter, NCache fungiert als Cache-Manager für Ihre Spring-Anwendung.
  • Durch die JCache-Caching-Anbieter, NCache verwendet die unterstützte Funktion von JCache.
 

Abhängigkeiten hinzufügen

Um Ihre Spring-Anwendung zu konfigurieren, müssen Sie zunächst alle erforderlichen Maven-Abhängigkeiten von Spring und hinzufügen NCache zu Verfügung stellen.

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

Konfigurieren Sie die Spring-Anwendung über den Spring Caching Provider

Nachdem Sie diese Abhängigkeiten hinzugefügt haben, definieren Sie Beans in Ihrer Spring-Anwendung – über die Java-basierte oder XML-basierte Bean-Definition.

Java-basierte Bean-Definition:
Zum Definieren von Beans mithilfe einer Java-basierten Definition müssen Sie Folgendes hinzufügen @Bohne Annotation in der CachingConfiguration-Klasse, wobei die setConfigFile-Methode den Pfad zu Ihrer angibt ncache-spring.xml-Datei. Ausführliche Informationen finden Sie unter Java-basiertes Bean Definition.

@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;
    }
}

XML-basierte Bean-Definition:
Zum Definieren von Beans mithilfe einer XML-basierten Definition müssen Sie eine XML-Datei hinzufügen, die das Caching ermöglicht und spezifiziert NCache als Cache-Manager. Sie müssen Bean-Tags sowohl für den CacheManager als auch für den CacheManager definieren NCacheKonfigurationsmanager. Darüber hinaus müssen Sie die folgenden Eigenschaften für den CacheManager angeben.

  • springConfigurationManager: Bezug auf NCache Konfigurationsmanager-Bean.
  • Protokolldateipfad: Vollständig qualifizierter Pfad für Cache-Manager-Protokolle.
<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>

Weitere Informationen finden Sie unter XML-basierte Bean-Definition.

Darüber hinaus müssen Sie Ihre Caches im konfigurieren ncache-spring.xml-Datei für die NCache Managementzentrum. Jeder Cache benötigt in dieser Datei eine eigene Definition mit einem eigenen Satz an Eigenschaften. Zum Beispiel:

<?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>
 

Konfigurieren Sie Spring-Anwendungen über den JCache-Caching-Provider

Spring unterstützt auch JCache-kompatible Caching-Anbieter, mit denen Sie JCache in Ihrer Spring-Anwendung verwenden können NCache. Fügen Sie zunächst Maven-Abhängigkeiten für Spring hinzu. NCacheund JCache. Konfigurieren Sie nach dem Hinzufügen von Abhängigkeiten die Caches:

  • Speichern spring.cache.cache-namen Tag in der Anwendungseigenschaften Datei. Der Cache-Name sollte mit dem im konfigurierten übereinstimmen NCache Verwaltungszentrum.
  • Konfigurieren Sie Ihren Cache über die JCacheManagerCustomizer Klasse, die den Cache zur Laufzeit mit der gewünschten Konfiguration initialisiert.

Weitere Informationen finden Sie in unserem JCache Spring-Dokumentation.

 

Identifizieren von Methoden, die zwischengespeichert werden müssen

Sobald Sie das Caching über beide oben definierten Konfigurationen aktiviert haben, besteht der nächste Schritt darin, diese Caching-Verhaltensweisen an die jeweiligen zu verwendenden Methoden zu binden NCache als Caching-Provider für Spring.

Sie können Caching-Verhalten auf zwei Arten an ihre Methoden binden. Einer ist durch Caching von Anmerkungen.

// 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);
    }
}

Wenn Sie keine Anmerkungen verwenden, dann Deklaratives XML-basiertes Caching kann verwendet werden, wenn Sie die Zielmethode und die Caching-Anweisungen extern angeben können.

<!-- 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>

Was macht man als nächstes?

© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.