[Redis] Spring Boot에 Redis 연동하기
2019. 9. 11. 09:33ㆍ개발/기타
spring data redis
, RedisTemplate
,RedisConnectionFactory
을 이용하여 프로젝트에 레디스를 연결합니다.
1. Dependency
Spring Data Redis
- 여러 Redis 드라이버(Lettuce 및 Jedis)를 추상화하여 사용할 수 있도록 함
- Lettuce 드라이버를 사용한 Reactive API
RedisTemplate
을 통해 다양한 Redis작업, 예외 변환 및 직렬화 지원- pub/sub, Sentinel/Cluster 등 지원
더 자세한 내용은 공식문서를 참고하세요.
Maven project(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Gradle project(build.gradle)
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-redis')
}
2. Configuration
springboot 2.0이상부터는 auto-configuration으로 위의 빈(redisConnectionFactory, RedisTemplate, StringTemplate)들이 자동으로 생성되기 때문에 굳이 Configuration을 만들지 않아도 즉시 사용가능하다.
출처 기본기를 쌓는 정아마추어 코딩블로그
RedisConnectionFactory
- Redis 서버와의 통신을 위한 low-level 추상화를 제공
- 설정에 따라서 새로운 RedisConnection 또는 이미 존재하는 RedisConnection을 리턴.
- RedisConnection 은 Redis 서버와의 통신 추상화를 제공하며, exception 발생시 Spring DataAccessException으로 전환.
- RedisConnection 은 binary value를 인자로 받고 결과를 리턴하는 low-level method를 리턴.
- Jedis, Jredis(1.7 Deprecated), Lettuce, SRP, RJC 등의 클라이언트 라이브러리가 있음.
가장 많이 사용되는 Java의 Redis Client는 Jedis와 Lettuce입니다. 두 가지의 성능을 비교한 글을 참고하여 적합한 기술을 이용하시길 바랍니다.
RedisTemplate
- Redis 서버에 Redis Command를 수행하기 위한 high-level 추상화를 제공
- 오브젝트 serialization 과 connection management를 수행
- Redis 서버에 데이터 CRUD를 위한 Key Type Operations 와 Key Bound Operations 인터페이스를 제공
- 오브젝트 serialization 과 connection management를 수행
- thread-safe 하며, 재 사용이 가능
- 대부분의 기능에 RedisSerializer 인터페이스를 사용.
StringRedisSerializer, JdkSerializationRedisSerializer, JacksonJsonRedisSerializer, Jackson2JsonRedisSerializer, GenericJackson2JsonRedisSerializer, OxmSerializer
를 사용할 수 있음. - Redis에 저장된 키와 값이 java.lang.String이 되도록하는 것이 일반적이므로 StringRedisTemplate 확장 기능을 제공.
- StringRedisSerializer를 사용하며, 저장된 키와 값은 사람이 읽을 수 있음.
RedisConfig.java
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
@Bean
public StringRedisTemplate stringRedisTemplate() {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
stringRedisTemplate.setConnectionFactory(redisConnectionFactory());
return stringRedisTemplate;
}
}
application.properties
spring.redis.lettuce.pool.max-active=10
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=2
spring.redis.port=6379
spring.redis.host=127.0.0.1
References
'개발 > 기타' 카테고리의 다른 글
[Trouble Shooting] 부동소수점 오차 / float, double (실수 자료형) 정확도, BigDecimal (30) | 2019.10.02 |
---|---|
[Trouble Shooting] CLI를 이용하여 외부 라이브러리를 포함한 Java파일 Compile 및 실행하기(Classpath) (0) | 2019.09.25 |
[Redis] Redis Cluster 사용하기 (Cluster Proxy) (0) | 2019.09.11 |
[Redis] Redis Master-Slave 사용하기 (Sentinel, HAProxy) (30) | 2019.09.11 |
[Redis] 4. 메모리 운영기법 및 주의점 (0) | 2019.09.11 |