Heim  >  Artikel  >  Java  >  Detailliertes Beispiel für die Integration von Redis durch Spring basierend auf Anmerkungen

Detailliertes Beispiel für die Integration von Redis durch Spring basierend auf Anmerkungen

零下一度
零下一度Original
2017-07-19 13:45:531818Durchsuche

1. Projektabhängigkeiten hinzufügen

2. Spring-Redis-Kontextkonfiguration hinzufügen

3. Redis.properties hinzufügen

4. Schreiben Sie eine benutzerdefinierte Redis-Konfigurationsklasse

5. Caching von Anmerkungen, wo Sie möchten

Als speicherbasierte Schlüsselwertdatenbank ist Redis als Cache-Server sehr kostengünstig.

Der offiziell eingeführte Client Jedis für Java bietet viele Schnittstellen und Methoden, die es Java-Operationen ermöglichen, Redis zu verwenden.

Das Spring-Team hat Jedis als unabhängiges Spring-Data-Redis-Projekt gekapselt, Spring-Funktionen angepasst und einige Befehle und Methoden von Jedis integriert.

Dieser Artikel konzentriert sich auf die Beschreibung des Integrationsprozesses, der es Ihnen ermöglicht, Redis schnell über Spring-Data-Redis in das Spring-Projekt zu integrieren. Schließlich sind alle beschäftigt.

Dieser Artikel konzentriert sich auf die Beschreibung des Integrationsprozesses, der es Ihnen ermöglicht, Redis schnell über Spring-Data-Redis in das Spring-Projekt zu integrieren.

1. Projektabhängigkeiten hinzufügen

        <!--redis 缓存--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.4.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>

2

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:context="http://www.springframework.org/schema/context"   xsi:schemaLocation="http://www.springframework.org/schema/beans
                        
                        
                        "><description>redis 相关类 Spring 托管</description><!--载入 redis 配置文件--><context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/><!-- 配置 JedisPoolConfig 实例 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxIdle" value="${redis.maxIdle}"/><property name="maxTotal" value="${redis.maxActive}"/><property name="maxWaitMillis" value="${redis.maxWait}"/><property name="testOnBorrow" value="${redis.testOnBorrow}"/></bean><!-- 配置JedisConnectionFactory --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="hostName" value="${redis.host}"/><property name="port" value="${redis.port}"/><property name="password" value="${redis.pass}"/><property name="database" value="${redis.dbIndex}"/><property name="poolConfig" ref="poolConfig"/></bean><!-- 配置RedisTemplate --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory"/></bean><!-- 配置RedisCacheManager --><bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"><constructor-arg name="redisOperations" ref="redisTemplate"/><property name="defaultExpiration" value="${redis.expiration}"/></bean><!-- 配置RedisCacheConfig --><bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig"><constructor-arg ref="jedisConnectionFactory"/><constructor-arg ref="redisTemplate"/><constructor-arg ref="redisCacheManager"/></bean></beans>

JedisConnectionFactory ist eine Jedis-Verbindungsfabrik, und die Konfiguration wird von einer separaten abstrakten JedisPoolConfig bereitgestellt.

Wenn Sie mit dem JdbcTemplate-Objekt von Spring vertraut sind, können Sie wahrscheinlich die Rolle von RedisTemplate erraten, RedisTemplate ist für RedisConnection ist gekapselt.

Bietet Verbindungsverwaltung, Serialisierung und andere Funktionen. Es bietet eine höhere Abstraktionsebene für die Redis-Interaktion, was den Betrieb von Redis erheblich erleichtert und vereinfacht.

RedisCacheManager dient als einheitlicher Planer und Manager von Redis. Wenn Sie interessiert sind, können Sie den Quellcode dekompilieren und einen Blick darauf werfen.

Erbt von org.springframework.cache.transaction.

AbstractTransactionSupportingCacheManager und implementiert org.springframework.cache.CacheManager.

3. Redis.properties hinzufügen

#============================#
#==== Redis settings ====#
#============================#
#redis 服务器 IP
redis.host=127.0.0.1

#redis 服务器端口
redis.port=6379

#redis 密码
redis.pass=redis#2017

#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
redis.dbIndex=0

#redis 缓存数据过期时间单位秒
redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis实例
redis.maxIdle=300

#控制一个 pool 可分配多少个jedis实例
redis.maxActive=600

#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

Natürlich können Sie die Konfigurationsdatei auch fest in das Programm einbinden, gerade in Es ist nur etwas schmerzhafter, wenn sich die Parameter ändern.

Die meisten Konfigurationselemente beziehen sich auf jedisPool. Wenn Sie mit Datenbankverbindungspools vertraut sind, werden Sie feststellen, dass ihre Konfigurationselemente einigermaßen ähnlich sind.

Wenn das System erneut auf ein Problem stößt und ausfällt, ist es eine gute Wahl, die Optionen hier zu verstehen. Weitere Konfigurationselemente werden ausführlich erläutert.

4. Schreiben Sie eine benutzerdefinierte Redis-Konfigurationsklasse

@Configuration
@EnableCachingpublic class RedisCacheConfig extends CachingConfigurerSupport {protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);private volatile JedisConnectionFactory mJedisConnectionFactory;private volatile RedisTemplate<String, String> mRedisTemplate;private volatile RedisCacheManager mRedisCacheManager;public RedisCacheConfig() {super();
    }public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {super();this.mJedisConnectionFactory = mJedisConnectionFactory;this.mRedisTemplate = mRedisTemplate;this.mRedisCacheManager = mRedisCacheManager;
    }public JedisConnectionFactory redisConnectionFactory() {return mJedisConnectionFactory;
    }public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {return mRedisTemplate;
    }public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {return mRedisCacheManager;
    }

    @Beanpublic KeyGenerator keyGenerator() {return new KeyGenerator() {
            @Overridepublic Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName());
                sb.append(method.getName());for (Object obj : objects) {
                    sb.append(obj.toString());
                }return sb.toString();
            }
        };
    }
}

Diese Konfigurationsklasse erbt von org.springframework.cache.annotation.CachingConfigurerSupport und implementiert die Methoden von org.springframework.cache.annotation.CachingConfigurer.

Für Laien ausgedrückt teilt diese Klasse Spring mit, dass der derzeit verwendete Cache-Dienst Redis ist, und passt die Regeln für die Cache-Schlüsselgenerierung an.

5. Cache-Anmerkungen, wo Sie möchten

Cache Wird im Allgemeinen verwendet in Fügen Sie auf der Serviceschicht einfach die entsprechenden Anmerkungen zu der Methode hinzu, die Sie zwischenspeichern möchten. Sie müssen die folgenden drei Caching-Anmerkungen beherrschen.

@Cacheable Spring speichert den Rückgabewert nach dem Aufruf zwischen, um sicherzustellen, dass das Ergebnis bei der nächsten Ausführung der Methode mit denselben Parametern direkt aus dem Cache abgerufen werden kann Die Methode muss erneut ausgeführt werden.

Die mit @CachePut annotierte Methode prüft vor der Ausführung nicht, ob zuvor ausgeführte Ergebnisse im Cache vorhanden sind. Stattdessen wird die Methode jedes Mal ausgeführt und die Ausführungsergebnisse werden als Schlüssel ausgedrückt Werte werden im angegebenen Cache gespeichert.

@CacheEvict wird verwendet, um Methoden oder Klassen zu kommentieren, die Cache-Elemente löschen müssen.

Natürlich gibt es in diesen Anmerkungen viele andere Attributkonfigurationen, und es gibt viele Dinge, die mit Spring-EL-Ausdrücken gemacht werden können. Es ist wahrscheinlich nur Ihre Fantasie, aber es gibt sie nichts, was nicht getan werden kann.

Wenn die Geschäftsregeln komplex sind, ist das Design des Cache-Schlüssels sehr wichtig. Ausgezeichnetes Design kann Ihre Anwendung zum Erfolg bringen.

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Integration von Redis durch Spring basierend auf Anmerkungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn