티스토리 뷰
안녕하십니까 이번에 프로젝트를 하면서 Spring Boot에서 Redis를 사용을 해봤습니다.
그 전까지 Redis에 대해서 몰랐는데 이번에 새로운 것을 알게 되서 정리합니다.
일단 Redis가 무엇인지 간단히 정리해 보겠습니다.
레디스(Redis)는 Remote Dictionary Server의 약자로서, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.
Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어입니다. Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성할 수 있습니다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있습니다.
Redis에 대한 특징이 잘 정리된 글을 발견하여 링크 올리니 한번 읽어 보시면 좋을 거 같습니다.
Redis를 이용해 DB처럼 사용할 수도 있다는 글을 본적이 있는데 저 같은 경우는 Redis를 이용하여
캐시 처럼 데이터를 저장하는 용도로 사용을 했습니다.
예를 들면 사용자 로그인데 대한 인증 코드 및 세션 등과 소켓통신을 이용하여 데이터를 보내야 할 때 DB가 아닌 Redis를 이용하여 데이터를 불러왔습니다.
Spring에서 Redis를 사용하기 위해서는 Jedis 또는 Lettuce를 이용해야 합니다.
저같은 경우는 Jedis를 사용했구요.
Spring boot에서 사용하기 위하여 다음과 같은 Dependency를 추가해야 합니다.
// redis
compile('org.springframework.boot:spring-boot-starter-data-redis')
compile group: 'redis.clients', name: 'jedis', version: '2.9.0'
그리고 Bean 설정을 잡아줍니다.
@Bean(name = "jedisPoolConfig")
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(env.getProperty("Redis.Max.Total")));
config.setMaxIdle(Integer.parseInt(env.getProperty("Redis.Max.Idle")));
return config;
}
@Bean
public JedisConnectionFactory jedisConnectionFactory(@Qualifier("jedisPoolConfig") JedisPoolConfig jedisPoolConfig) {
RedisStandaloneConfiguration standConfig = new RedisStandaloneConfiguration();
standConfig.setHostName(env.getProperty("Redis.Host"));
standConfig.setPort(Integer.parseInt(env.getProperty("Redis.Port")));
if(env.getProperty("Redis.Pwd") != null) {
standConfig.setPassword(RedisPassword.of(env.getProperty("Redis.Pwd")));
}
JedisClientConfigurationBuilder jedisConfig = JedisClientConfiguration.builder();
jedisConfig.connectTimeout(Duration.ofSeconds(Long.parseLong(env.getProperty("Redis.Session.Timeout"))));
jedisConfig.usePooling().poolConfig(jedisPoolConfig);
return new JedisConnectionFactory(standConfig, jedisConfig.build());
}
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate config = new RedisTemplate();
config.setConnectionFactory(jedisConnectionFactory(jedisPoolConfig()));
return config;
}
Setting은 끝났으니 이제 사용을 해야합니다.
Redis를 Global하게 사용하기 위해 Redis Class를 생성 후 다음과 같은 메서드를 만들어 줬습니다.
public static String get(final String key, RedisTemplate<serializable, serializable=""> redisTemplate) {
return redisTemplate.execute(new RedisCallback<string>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
byte[] value = connection.get(key.getBytes());
if(value != null) {
return new String(value);
}
return null;
}
});
}
public static void set(final String key, final String value, RedisTemplate<serializable, serializable=""> redisTemplate) {
redisTemplate.execute(new RedisCallback<object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.set(key.getBytes(), value.getBytes());
return null;
}
});
}
public static void set(final String key, final String value, final long time, RedisTemplate<serializable, serializable=""> redisTemplate) {
redisTemplate.execute(new RedisCallback<object≶() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
connection.set(key.getBytes(), value.getBytes(), Expiration.milliseconds(time), SetOption.UPSERT);
return null;
}
});
set을 두개를 만든 이유는 하나는 유효시간을 설정하기 위해서 입니다.
사용은 잘 되니 결과는 직접 확인 해보세요!
참고
Redis 개념
https://ko.wikipedia.org/wiki/%EB%A0%88%EB%94%94%EC%8A%A4
https://aws.amazon.com/ko/elasticache/what-is-redis/
https://goodgid.github.io/Redis/
Redis 사용
https://www.baeldung.com/spring-data-redis-tutorial
https://jeong-pro.tistory.com/175
https://docs.spring.io/spring-data-redis/docs/current/reference/html/
'BackEnd > Java' 카테고리의 다른 글
Java send HTTP request (0) | 2019.04.02 |
---|---|
Spring boot + Mybatis 연결하기 (0) | 2019.03.26 |
Spring boot jwt token 사용하기 (5) | 2019.03.05 |
spring boot properties파일 분리하기 (0) | 2019.03.04 |
nginx (0) | 2019.02.27 |
- Total
- Today
- Yesterday
- Python
- JSON
- python3
- Router
- 페이스북 로그인
- react
- data grid component
- Spring
- jQuery
- Spring Boot
- MySQL
- 파이썬
- facebook login
- data gird component
- localStorage
- Java
- angular router
- React-router
- data component module
- mobx
- Redux
- 파이썬3
- data component
- CSS
- https://www.tistory.com/auth/logout/
- JavaScript
- data table component
- Angular
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |