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.
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.
NCache bietet Spring-Caching-Unterstützung auf die folgenden zwei Arten:
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>
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.
<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>
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:
Weitere Informationen finden Sie in unserem JCache Spring-Dokumentation.
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>