Maison  >  Article  >  Java  >  Exemple détaillé de Spring intégrant Redis basé sur des annotations

Exemple détaillé de Spring intégrant Redis basé sur des annotations

零下一度
零下一度original
2017-07-19 13:45:531802parcourir

1. Ajouter des dépendances du projet

2. Ajouter la configuration spring-redis-context

3.

4. Écrivez une classe de configuration Redis personnalisée

5. Mise en cache des annotations là où vous le souhaitez

En tant que base de données clé-valeur basée sur la mémoire, Redis est très rentable en tant que serveur de cache.

Le client Jedis officiellement lancé pour Java fournit de nombreuses interfaces et méthodes pour permettre aux opérations Java d'utiliser Redis.

L'équipe Spring a encapsulé Jedis en tant que projet Spring-data-redis indépendant, correspondant aux fonctionnalités de Spring et intégrant certaines commandes et méthodes de Jedis.

Cet article se concentre sur la description du processus d'intégration, qui vous permet d'intégrer rapidement redis dans le projet spring via spring-data-redis. Après tout, tout le monde est occupé.

Cet article se concentre sur la description du processus d'intégration, qui vous permet d'intégrer rapidement redis dans le projet spring via spring-data-redis. Après tout, tout le monde est occupé.

1. Ajouter des dépendances du projet

        <!--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 est la fabrique de connexions Jedis, et la configuration est fournie par le résumé séparé JedisPoolConfig.

Si vous connaissez l'objet

JdbcTemplate de Spring, vous pouvez probablement deviner le rôle de RedisTemplate, RedisTemplate convient pour RedisConnection est encapsulé.

Fournit la gestion des connexions, la sérialisation et d'autres fonctions. Il fournit un niveau d'abstraction plus élevé pour l'interaction Redis, ce qui facilite et simplifie grandement le fonctionnement de Redis.

RedisCacheManager sert de planificateur et de gestionnaire unifié de redis. Si vous êtes intéressé, vous pouvez décompiler le code source et y jeter un œil.

Hérite de org.springframework.cache.transaction.

AbstractTransactionSupportingCacheManager et implémente org.springframework.cache.CacheManager.

3. Ajoutez redis.properties

#============================#
#==== 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

Bien sûr, vous pouvez également coder en dur le fichier de configuration dans le programme, juste en C'est juste un peu plus pénible lorsque les paramètres changent.

La plupart des éléments de configuration se trouvent autour de jedisPool. Si vous êtes familier avec les pools de connexions de bases de données, vous constaterez que leurs éléments de configuration sont quelque peu similaires.

Lorsque le système Redis rencontre un problème et échoue, c'est un bon choix de comprendre les options ici D'autres éléments de configuration sont expliqués en détail.

4. Écrivez une classe de configuration Redis personnalisée

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

Cette classe de configuration hérite de org.springframework.cache.annotation.CachingConfigurerSupport et implémente les méthodes de org.springframework.cache.annotation.CachingConfigurer.

En termes simples, cette classe indique à Spring que le service de cache actuellement utilisé est Redis et personnalise les règles de génération de clé de cache.

5. Cachez les annotations là où vous le souhaitez

Cache Généralement utilisé dans la couche de service, ajoutez simplement les annotations correspondantes à la méthode que vous souhaitez mettre en cache. Vous devez maîtriser les trois annotations de mise en cache suivantes.

@Cacheable spring mettra en cache la valeur de retour après son appel pour garantir que la prochaine fois que la méthode sera exécutée avec les mêmes paramètres, le résultat pourra être obtenu directement à partir du cache sans le La méthode doit être exécutée à nouveau.

La méthode annotée @CachePut ne vérifiera pas s'il y a des résultats précédemment exécutés dans le cache avant l'exécution. Au lieu de cela, la méthode sera exécutée à chaque fois et les résultats de l'exécution seront exprimés sous forme de clé. valeurs. Le formulaire correct est stocké dans le cache spécifié.

@CacheEvict est utilisé pour annoter les méthodes ou les classes qui doivent vider les éléments du cache.

Bien sûr, il existe de nombreuses autres configurations d'attributs dans ces annotations, et il y a beaucoup de choses qui peuvent être faites avec les expressions spring-el. Ce n'est probablement que votre imagination, mais il y en a. rien qui ne puisse être fait.

Lorsque les règles métier sont complexes, la conception de la clé de cache est très importante. Une excellente conception peut faire voler votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn