티스토리 뷰

BackEnd/Java

Spring boot Redis 사용하기

철철22 2019. 3. 12. 01:18
반응형

안녕하십니까 이번에 프로젝트를 하면서 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://yonguri.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-SpringBoot-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1-3-Redis-%EC%84%A4%EC%A0%95


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
링크
«   2024/05   »
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
글 보관함