Heim >Datenbank >Redis >Informationen zur Spring Redis-Annotation zur Implementierung des Caching-Mechanismus

Informationen zur Spring Redis-Annotation zur Implementierung des Caching-Mechanismus

藏色散人
藏色散人nach vorne
2020-11-02 14:08:192196Durchsuche

In der Kolumne Redis-Tutorial wird Ihnen der von Spring Redis Annotations implementierte Caching-Mechanismus vorgestellt. Ich hoffe, dass er Freunden in Not hilfreich sein wird!

1. XML-Konfiguration

rrree

2. Detaillierte Erläuterung der Cache-Anmerkungen @Cacheable, @CachePut
1. Detaillierte Erläuterung der Verwendung von @Cacheable
1. Wird für Methoden oder Klassen verwendet.
2. Was ist der Unterschied zwischen diesen beiden Verwendungen?
Wird für eine Methode verwendet, um anzuzeigen: Der Rückgabewert dieser Methode wird zwischengespeichert.
Wird für eine Klasse verwendet, um anzuzeigen: Alle Methoden der Klasse unterstützen diese Annotation.
3 Was ist das Ergebnis nach der Verwendung? Wenn diese Methode das nächste Mal mit derselben Methode und denselben Parametern aufgerufen wird, wird der Wert direkt aus dem Cache abgerufen, ohne dass die Methode erneut ausgeführt werden muss.
4. Wie wird der Rückgabewert im Cache gespeichert? Es wird in Form von Schlüssel-Wert-Paaren im Cache gespeichert. Der Schlüssel wird durch zwei Strategien generiert: Standardstrategie und benutzerdefinierte Strategie. 5. Wie verwende ich die Standardstrategie und die Standardstrategie?
Standardstrategie: Doppeltes „::“-Spleißen nach dem Wertwert, formale Parameterliste. Wenn der formale Parameter ein Objekt ist, verwenden Sie das JSON-Format:

 <bean id="poolConfigTax" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="${redis_tax.maxIdle}" />  
        <property name="minIdle" value="${redis_tax.minIdle}" />  
        <property name="maxTotal" value="${redis_tax.maxTotal}" />
        <property name="testOnBorrow" value="${redis_tax.testOnBorrow}" />  
    </bean>  
    <!-- Tax redis 数据库  -->
    <bean id="connectionFactoryTax" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"   
        p:host-name="${redis_tax.host}" p:port="${redis_tax.port}" p:password="${redis_tax.pass}"  p:pool-config-ref="poolConfigTax"
        p:database="0"/>  
    <!--redis操作模版,使用该对象可以操作redis  -->  
    <bean id="redisTemplateTax" class="org.springframework.data.redis.core.RedisTemplate" >    
        <property name="connectionFactory" ref="connectionFactoryTax" />    
        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can&#39;t cast to String!!  -->    
        <property name="keySerializer" >    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />    
        </property>    
        <property name="valueSerializer" >    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />    
        </property>    
        <property name="hashKeySerializer">    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    
        </property>    
        <property name="hashValueSerializer">    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>    
        </property>    
        <!--开启事务  -->  
        <property name="enableTransactionSupport" value="false"></property>  
    </bean>   
    <!-- 配置RedisCacheManager -->
    <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
        <constructor-arg name="redisOperations" ref="redisTemplateTax" />
    </bean>
    <cache:annotation-driven cache-manager="redisCacheManager"/>

Benutzerdefinierte Strategie: Das Schlüsselattribut wird verwendet, um das Rückgabeergebnis des Frühlings anzugeben Cache-Methode Der entsprechende Schlüssel. Diese Eigenschaft unterstützt SpringEL-Ausdrücke. Wenn wir dieses Attribut nicht angeben, verwendet Spring die Standardstrategie zum Generieren von Schlüsseln.

Benutzerdefinierte Strategie bedeutet, dass wir unseren Schlüssel über den EL-Ausdruck von Spring angeben können. EL-Ausdrücke können hier Methodenparameter und ihre entsprechenden Eigenschaften verwenden. Bei der Verwendung von Methodenparametern können wir direkt „#Parametername“ oder „#pParameterindex“ verwenden. Hier sind einige Beispiele für die Verwendung von Parametern als Schlüssel.

@CacheConfig(cacheNames="enterprise")//<!-- 声明缓存使用的缓存名称 -->
public interface EnterpriseRepo extends JpaRepository<Enterprise, Integer>,JpaSpecificationExecutor<Enterprise>{
    @Cacheable(value="cash1")
    Enterprise findByid(Integer id);

    @CachePut(value="cash1")
    Enterprise save(Enterprise enterprise);

}

 Zusätzlich zu den oben genannten Methodenparametern als Schlüssel stellt uns Spring auch ein Root-Objekt zur Verfügung, mit dem Schlüssel generiert werden können. Über dieses Stammobjekt können wir die folgenden Informationen erhalten.


Wenn wir die Attribute des Root-Objekts als Schlüssel verwenden möchten, können wir auch „#root“ weglassen, da Spring standardmäßig die Attribute des Root-Objekts verwendet. Zum Beispiel:

@Cacheable(value="users", key="#id")

   public User find(Integer id) {
      return null;
   }

   @Cacheable(value="users", key="#p0")
   public User find(Integer id) {
      return null;
   }

   @Cacheable(value="users", key="#user.id")
   public User find(User user) {
      return null;
   }

   @Cacheable(value="users", key="#p0.id")
   public User find(User user) {
      return null;
   }

6. Das Bedingungsattribut gibt die Bedingungen für das Auftreten an

Manchmal möchten wir möglicherweise nicht alle Rückgabeergebnisse einer Methode zwischenspeichern. Diese Funktion kann über das Bedingungsattribut erreicht werden. Das Bedingungsattribut ist standardmäßig leer, was bedeutet, dass alle Anrufsituationen zwischengespeichert werden. Sein Wert wird durch einen SpringEL-Ausdruck angegeben. Wenn er wahr ist, bedeutet dies, dass er zwischengespeichert wird. Wenn er falsch ist, bedeutet dies, dass die Methode bei jedem Aufruf ausgeführt wird. Das folgende Beispiel zeigt, dass die Zwischenspeicherung nur erfolgt, wenn die Benutzer-ID eine gerade Zahl ist.

@Cacheable(value={"users", "xxx"}, key="caches[1].name")

public User find(User user) {
   return null;
}

2. @CachePut

In einer Umgebung, die Spring Cache unterstützt, prüft Spring vor jeder Ausführung, ob ein Cache-Element mit demselben Schlüssel im Cache vorhanden ist Führen Sie die Methode nicht erneut aus, sondern rufen Sie das Ergebnis direkt aus dem Cache ab und geben Sie es zurück. Andernfalls wird es ausgeführt und das zurückgegebene Ergebnis im angegebenen Cache gespeichert. @CachePut kann auch eine Methode zur Unterstützung der Caching-Funktionalität deklarieren. Der Unterschied zu @Cacheable besteht darin, dass die mit @CachePut annotierte Methode vor der Ausführung nicht prüft, ob zuvor ausgeführte Ergebnisse im Cache vorhanden sind. Stattdessen wird die Methode jedes Mal ausgeführt und die Ausführungsergebnisse in Form von Schlüsseln gespeichert. Wertepaare im angegebenen Cache.

Wird im Allgemeinen in Speicher- und Aktualisierungsmethoden verwendet.

@CachePut kann auch zu Klassen und Methoden mit Anmerkungen versehen werden. Die Attribute, die wir bei Verwendung von @CachePut angeben können, sind dieselben wie bei @Cacheable.

@CachePut("users")//Die Methode wird jedes Mal ausgeführt und das Ergebnis wird im angegebenen Cache gespeichert

@Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")
public User find(User user) {
   System.out.println("find user by user " + user);
   return user;
}

3. @CacheEvict


@CacheEvict wird verwendet, um Methoden oder Methoden zu markieren, die ausgeführt werden müssen Cache-Kategorie löschen. Wenn es für eine Klasse markiert ist, bedeutet dies, dass die Ausführung aller darin enthaltenen Methoden den Cache-Löschvorgang auslöst. Zu den Attributen, die von @CacheEvict angegeben werden können, gehören Wert, Schlüssel, Bedingung, allEntries und beforeInvocation. Die Semantik von Wert, Schlüssel und Bedingung ähnelt den entsprechenden Attributen von @Cacheable. Das heißt, der Wert gibt an, auf welchem ​​Cache der Löschvorgang stattfindet (entsprechend dem Namen des Caches); wenn nicht angegeben, wird der von der Standardrichtlinie generierte Schlüssel verwendet unter dem der Clearing-Vorgang erfolgt. Lassen Sie uns die beiden neuen Attribute allEntries und beforeInvocation einführen.

1. allEntries-Attribut
allEntries ist ein boolescher Typ, der angibt, ob alle Elemente im Cache gelöscht werden müssen. Der Standardwert ist false, was bedeutet, dass er nicht benötigt wird. Wenn allEntries als true angegeben ist, ignoriert Spring Cache den angegebenen Schlüssel. Manchmal müssen wir alle Elemente auf einmal aus dem Cache löschen, was effizienter ist, als Elemente einzeln zu löschen.

public User find(Integer id) {
      return null;
}

2. beforeInvocation-Attribut

Der Löschvorgang wird standardmäßig ausgelöst, nachdem die entsprechende Methode erfolgreich ausgeführt wurde. Das heißt, der Löschvorgang wird nicht ausgelöst, wenn die Methode aufgrund einer Ausnahme nicht erfolgreich zurückgegeben werden kann. Sie können beforeInvocation verwenden, um den Zeitpunkt zu ändern, zu dem der Löschvorgang ausgelöst wird. Wenn wir den Wert dieser Eigenschaft auf „true“ festlegen, löscht Spring das angegebene Element im Cache, bevor diese Methode aufgerufen wird.

@CacheEvict(value="users", allEntries=true)
public void delete(Integer id) {
   System.out.println("delete user by id: " + id);
}

Das obige ist der detaillierte Inhalt vonInformationen zur Spring Redis-Annotation zur Implementierung des Caching-Mechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen