Ehcache-Beispiel

Ehcache ist die am weitesten verbreitete Java-Open-Source-Cache-Implementierung. Der große Vorteil dieses Caches besteht darin, dass er sich problemlos in alle anderen Bibliotheken integrieren lässt. In diesem Tutorial werde ich ein sehr einfaches Beispiel mit der Ehcache-Bibliothek schreiben.

Die neueste version:

  • Die neueste Version von ehcache ist 2.10.1. Sie können die neuesten Distributionen von ehcache herunterladen Hier.
  • Es gibt eine Meilensteinveröffentlichung

Lesen Sie auch: Spring Cache Tutorial

Hier ist die Projektstruktur für dieses Beispiel. Es ist ein sehr einfaches Beispiel, bei dem die Daten mithilfe von auf der Festplatte gespeichert werden ehcache.xml Konfigurationen.

  • Projektstruktur
  • Maven-Abhängigkeiten
  • Cache-Implementierungsklasse
  • ehcache.xml-Konfigurationen
  • Ausgabe
  • ehcache

    pom.xml

    <dependencies>
          <dependency>
    		<groupId>net.sf.ehcache</groupId>
    		<artifactId>ehcache</artifactId>
    		<version>2.10.1</version>
    	</dependency>
      </dependencies>
    

    EhcacheExample.java

    public class EhcacheExample {
    
    	public static void main(String[] args) {
    
    		//Create a cache manager
    		CacheManager cm = CacheManager.getInstance();
    
    		//Create a cache called "cacheStore"
    		//cm.addCache("cacheStore");
    
    		//Get a cache called "cacheStore"
    		Cache cache = cm.getCache("cacheStore");
    
    		//Add few elements in to cache
    		UserDetails details = new UserDetails("001","First Name","Last Name");
    		cache.put(new Element("1", details));
    		cache.put(new Element("2", "Two"));
    		cache.put(new Element("3", "Three"));
    
    		//Get the element from cache
    		Element ele = cache.get("1");
    		UserDetails u = (UserDetails)ele.getObjectValue();
    		System.out.println(u.getUserId());
    
    		//Whether key is in the cache?
    		System.out.println(cache.isKeyInCache("1"));
    		System.out.println(cache.isKeyInCache("5"));
    
    		//Call shutdown to close the cache manager
    		cm.shutdown();
    
    	}
    
    }
    

    ehcache.xml

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
    
    	<!-- By default, Ehcache stored the cached files in temp folder. -->
    	<!-- <diskStore path="java.io.tmpdir" /> -->
    	
    	<!-- Ask Ehcache to store cache in this path -->
    	<diskStore path="d:\\cache" />
    
    	<!-- Sample cache named cacheStore This cache contains a maximum in memory of 10000 elements, and will expire an element if it is idle for more than 5 minutes and lives for more than 10 minutes. If there are more than 10000 elements it will overflow to the disk cache, which in this configuration will go to wherever java.io.tmp is defined on your system. On a standard Linux system this will be /tmp" -->
    	<cache name="cacheStore" maxEntriesLocalHeap="10000" maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" transactionalMode="off">
    		<persistence strategy="localTempSwap" />
    	</cache>
    
    </ehcache>
    

    UserDetails.java

    public class UserDetails {
    	private String userId;
    	private String firstName;
    	private String lastName;
    	public UserDetails(){}
    	public UserDetails(String userId,String firstName,String lastName){
    		this.userId = userId;
    		this.firstName = firstName;
    		this.lastName = lastName;
    	}
    	// setters and getters here		
    }
    

    Ausgabe:

    Hier ist die Ausgabe für das ehcache-Beispielprogramm.

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    001
    true
    false
    

    EHcache.xml-Attribute

    Wenn Sie mit der Ehcache-Konfiguration arbeiten, ist es sehr wichtig, die Bedeutung und Verwendung jedes einzelnen Elements und Attributs zu verstehen, das in der Datei ehcache.xml verwendet wird. Hier erkläre ich die Verwendung einiger nützlicher Attribute, die in den Ehcache-Konfigurationen am häufigsten verwendet werden.

    defaultCache

    Dieses Element ist eine obligatorische Standard-Cache-Konfiguration. Diese Einstellungen werden auf Caches angewendet, die programmgesteuert mit CacheManager.add(String CacheName) erstellt wurden. Der defaultCache hat einen impliziten Namen „default“, der ein reservierter Cache-Name ist.

    maxElementsInMemory

    Das Attribut teilt dem Ehcache mit, wie viele Caches im Speicher gespeichert werden. Wenn die Gesamtzahl der Caches das Limit erreicht, werden die Caches auf die Festplatte übertragen, wenn die Konfigurationen auf „overflowToDisk=true“ festgelegt sind. Wenn dieses Attribut auf „false“ gesetzt ist, werden alte Caches entfernt und neue Caches ersetzen die alten.

    ewig

    Wenn dieses Attribut festgelegt ist als truedann andere Attribute timeToIdleSecondsUnd timeToLiveSeconds muss nicht konfiguriert werden. Wenn Sie diese Attribute konfigurieren, werden die konfigurierten Werte nicht berücksichtigt. Für beide Attribute wird der Standardwert 0 verwendet. Beachten Sie, dass die Konfiguration „eternal=true“ impliziert, dass die Caching-Konfiguration das nicht berücksichtigen sollte timeToIdleSeconds Und timeToLiveSeconds. Dies bedeutet, dass die Caches im Store nicht für immer ablaufen. Es muss vom Serveradministrator manuell durch einen Neustart des Servers gelöscht werden. Seien Sie vorsichtig bei der Verwendung dieses Attributs.

    overflowToDisk

    Dieses Attribut legt fest, ob Cache-Elemente auf die Festplatte überlaufen können, wenn der Speicher den maxElementsInMemory-Grenzwert erreicht hat. Wenn das Attribut auf „false“ gesetzt ist, laufen Cache-Elemente nicht auf die Festplatte über, wenn der Speicher den maxElementsInMemory-Grenzwert erreicht hat.

    timeToIdleSeconds

    Dieses Attribut legt die Leerlaufzeit fest, bevor sie abläuft. Wenn Sie dieses Attribut beispielsweise auf 10 festlegen, verfallen die Caches, auf die 10 Sekunden lang nicht zugegriffen wird, automatisch. Der Standardwert für dieses Attribut ist 0. Wenn der Wert 0 ist, wird dieses Attribut für den Ablauf nicht berücksichtigt. timeToIdleSeconds ist nur gültig, wenn der ewige Attributwert falsch ist.

    timeToLiveSeconds

    Dieses Attribut legt die Gesamtablaufzeit für den Cache fest. Es ist die Zeit zwischen Erstellungszeit und Ablaufzeit. Der Standardwert für dieses Attribut ist 0. Wenn der Wert 0 ist, wird dieses Attribut für den Ablauf nicht berücksichtigt. timeToLiveSeconds ist nur gültig, wenn der ewige Attributwert falsch ist.

    maxElementsOnDisk

    Dieses Attribut legt die maximale Anzahl von Objekten fest, die im DiskStore verwaltet werden. Der Standardwert ist Null, also unbegrenzt. Dieses Attribut ist ab Version 2.5 veraltet.

    maxEntriesLocalDisk vs. maxElementsOnDisk

    maxElementsOnDisk ist der historische Name, seit 2.5 veraltet. Dieses Attribut wird durch das neue Attribut maxElementsLocalDisk ersetzt. Aber das neue Attribut steuert genau dieselbe interne Variable.

    Wo werden die Cache-Dateien gespeichert?

    Der standardmäßige Festplattenspeicherpfad für die Cache-Datei ist das standardmäßige temporäre Verzeichnis des Betriebssystems. Wenn Sie es beispielsweise unter Linux ausführen, wäre der Standardpfad /tmp. Bitte weiterhin mit dem temporären Verzeichnis des Anwendungsservers verwechseln. Hier sind die vordefinierten Variablen zur Angabe der Standardverzeichnisse.

    • user.home – Home-Verzeichnis des Benutzers
    • user.dir – Das aktuelle Arbeitsverzeichnis des Benutzers
    • java.io.tmpdir – Standardpfad für temporäre Dateien
    • ehcache.disk.store.dir – Eine Systemeigenschaft

    Wenn Sie ein Unterverzeichnis erstellen möchten, kann dieses beispielsweise als java.io.tmpdir/one angegeben werden

    Ausnahmen

    Wenn Sie die folgende Ausnahme erhalten, liegt der wahrscheinlichste Grund darin, dass Ihnen die Ausnahme fehlt spring-context-support.jar Datei. Diese Datei enthält tatsächlich die org.springframework.cache.ehcache.EhCacheCacheManager Datei.

    Caused by: java.lang.ClassNotFoundException: org.springframework.cache.ehcache.EhCacheCacheManager
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    	at org.springframework.util.ClassUtils.forName(ClassUtils.java:266)
    	at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:419)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1302)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1273)
    	... 31 more
    

    Sie können die obige Ausnahme beheben, indem Sie die folgende Abhängigkeit in Ihre pom.xml-Datei hinzufügen:

    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context-support</artifactId>
       <version>X.Y.Z.RELEASE</version>
    </dependency>
    

    Kommentar verfassen

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Nach oben scrollen