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>
<?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>
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
시스템 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에게 알리고 캐시 키 생성 규칙을 사용자 정의합니다.
캐싱은 일반적으로 서비스 계층에서 사용되며, 캐시하려는 메서드에 해당 주석을 추가하면 됩니다. 주석을 마스터해야 합니다.
@Cacheable 스프링은 호출된 후 반환 값을 캐시하여 다음에 동일한 매개변수로 메서드가 실행될 때 메서드를 다시 실행할 필요 없이 캐시에서 직접 결과를 얻을 수 있도록 합니다.
@CachePut 어노테이션이 붙은 메소드는 실행 전에 이전에 실행한 결과가 캐시에 있는지 확인하지 않고, 매번 메소드를 실행하고 실행 결과를 키-형식으로 지정된 캐시에 저장합니다. 값 쌍.
@CacheEvict는 캐시 요소를 지워야 하는 메서드나 클래스에 주석을 추가하는 데 사용됩니다.
물론 이 주석에는 그 외에도 다양한 속성 구성이 있고, 스프링엘 표현으로 할 수 있는 것도 많겠지만, 아마 상상일 뿐이지 못할 일은 없습니다.
비즈니스 규칙이 복잡할 경우 캐시 키의 디자인이 매우 중요합니다. 뛰어난 디자인으로 인해 애플리케이션이 성공할 수 있습니다.
위 내용은 Annotation 기반의 Spring 통합 Redis 상세 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!