>Java >java지도 시간 >Annotation 기반의 Spring 통합 Redis 상세 예시

Annotation 기반의 Spring 통합 Redis 상세 예시

零下一度
零下一度원래의
2017-07-19 13:45:531821검색

1. 프로젝트 종속성을 추가합니다

2. spring-redis-context 구성을 추가합니다

3. redis.properties를 추가합니다

5. 원하는 곳에 캐시 주석

Redis는 메모리 기반의 Key-Value 데이터베이스이며, 캐시 서버로 사용하기에 매우 비용 효율적입니다.

공식 출시된 Client Jedis for Java는 Java 작업이 Redis를 사용할 수 있도록 다양한 인터페이스와 메서드를 제공합니다.

Spring 팀은 Jedis를 독립적인 spring-data-redis 프로젝트로 캡슐화하여 Spring 기능을 일치시키고 Jedis의 일부 명령과 방법을 통합했습니다.

이 글은 spring-data-redis를 통해 redis를 스프링 프로젝트에 신속하게 통합할 수 있는 통합 프로세스를 설명하는 데 중점을 둡니다.

이 기사에서는 spring-data-redis를 통해 redis를 스프링 프로젝트에 빠르게 통합할 수 있는 통합 프로세스를 설명하는 데 중점을 둡니다.

1. 프로젝트 종속성 추가

        <!--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. spring-redis-context 구성 추가

<?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
는 Abstract에서 제공됩니다. JedisPoolConfig.

Spring의 JdbcTemplate 객체에 익숙하다면

RedisTemplate

의 역할이 RedisConnection을 캡슐화한다는 것을 짐작할 수 있습니다. 연결 관리, 직렬화 및 기타 기능을 제공하여 Redis 상호 작용을 위한 더 높은 수준의 추상화를 제공하여 Redis 운영을 크게 촉진하고 단순화합니다. RedisCacheManager는 Redis의 통합 스케줄러이자 관리자입니다. 관심이 있으시면 소스 코드를 디컴파일하여 살펴보세요.

org.springframework.cache.transaction.

AbstractTransactionSupportingCacheManager

에서 상속되고 org.springframework.cache.CacheManager을 구현합니다.

3. 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

물론 구성 파일을 프로그램에 하드 코딩할 수도 있지만 매개변수가 변경되면 더 고통스럽습니다.

대부분의 구성 항목은 jedisPool에 관한 것입니다. 데이터베이스 연결 풀에 익숙하다면 둘의 구성 항목이 다소 유사하다는 것을 알 수 있습니다.

시스템 redis에 문제가 발생하여 실패할 경우 여기에서 옵션을 이해하는 것이 좋습니다.

더 많은 구성 항목이 자세히 설명되어 있습니다.

4. 사용자 정의 Redis 구성 클래스 작성

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

이 구성 클래스는 org.springframework.cache.annotation.CachingConfigurerSupport를 상속하고 org.springframework.cache.annotation.CachingConfigurer의 메서드를 구현합니다.

일반인의 관점에서 이 클래스는 현재 사용되는 캐시 서비스가 redis임을 Spring에게 알리고 캐시 키 생성 규칙을 사용자 정의합니다.

5. 원하는 곳에서 주석 캐싱을 수행합니다.

캐싱은 일반적으로 서비스 계층에서 사용되며, 캐시하려는 메서드에 해당 주석을 추가하면 됩니다. 주석을 마스터해야 합니다.

@Cacheable 스프링은 호출된 후 반환 값을 캐시하여 다음에 동일한 매개변수로 메서드가 실행될 때 메서드를 다시 실행할 필요 없이 캐시에서 직접 결과를 얻을 수 있도록 합니다.

@CachePut 어노테이션이 붙은 메소드는 실행 전에 이전에 실행한 결과가 캐시에 있는지 확인하지 않고, 매번 메소드를 실행하고 실행 결과를 키-형식으로 지정된 캐시에 저장합니다. 값 쌍.

@CacheEvict는 캐시 요소를 지워야 하는 메서드나 클래스에 주석을 추가하는 데 사용됩니다.

물론 이 주석에는 그 외에도 다양한 속성 구성이 있고, 스프링엘 표현으로 할 수 있는 것도 많겠지만, 아마 상상일 뿐이지 못할 일은 없습니다.

비즈니스 규칙이 복잡할 경우 캐시 키의 디자인이 매우 중요합니다. 뛰어난 디자인으로 인해 애플리케이션이 성공할 수 있습니다.

위 내용은 Annotation 기반의 Spring 통합 Redis 상세 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.