Redis Java Client중 "Lettuce"를 사용하여 진행한다.
의존성 추가
compile 'org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE' // Redis
Redis 외부설정 Properties (application.yml)
변수 | 기본값 | 설명 |
spring.redis.database | 0 | 커넥션 팩토리에 사용되는 데이터베이스 인덱스 |
spring.redis.host | localhost | 레디스 서버 호스트 |
spring.redis.password | 레디스 서버 로그인 패스워드 | |
spring.redis.pool.max-active | 8 | pool에 할당될 수 있는 커넥션 최대수 (음수로 하면 무제한) |
spring.redis.pool.max-idle | 8 | pool의 "idle(유휴)"커넥션 최대수 (음수로 하면 무제한) |
spring.redis.pool.max-wait | -1 | pool이 바닥났을 때 예외발생 전에 커넥션 할당 차단의 최대시간 (단위: 밀리세컨드, 음수는 무제한 차단) |
spring.redis.port.min-idle | 0 | pool에서 관리하는 idle 커넥션의 최소 수 대상 (양수일 때만 유효) |
spring.redis.port | 6379 | 레디스 서버 포트 |
spring.redis.sentinel.master | 레디스 서버 이름 | |
spring.redis.sentinel.nodes | 호스트:포트 쌍 목록 (콤마로 구분) | |
spring.redis.timeout | 0 | 커넥션 타임아웃 (단위: 밀리세컨드) |
Redis 설정값 Bean에 등록
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Value("${spring.redis.password}")
private String redisPassword;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(redisPort);
redisStandaloneConfiguration.setPassword(redisPassword);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
Redis Cluster를 사용한 다중 Node 접속정보 설정방법
=> 단일 노드 접근방법과는 달리, RedisConnectionFactory가 아닌, LettuceConnectionFactory(RedisConnectionFactory의 구현체)를 사용하여 RedisTemplate에 설정한다.
<application.yml>
spring:
redis:
cluster:
nodes:
192.168.0.1:6379,
192.168.0.2:6379,
192.168.0.3:6379,
192.168.0.4:6379,
192.168.0.5:6379,
192.168.0.6:6379
max-redirects: 5 # 클러스터 노드간의 리다이렉션 숫자를 제한
password: 1234
<RedisConfig.java>
package com.test.config;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Configuration
public class RedisConfig {
@Value("${spring.redis.cluster.nodes}")
private String clusterNodes;
@Value("${spring.redis.cluster.max-redirects}")
private int maxRedirects;
@Value("${spring.redis.password}")
private String password;
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
List<String> clusterNodeList = Arrays.asList(StringUtils.split(clusterNodes, ','))
.stream()
.map(m -> m.trim())
.collect(Collectors.toList());
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(clusterNodeList);
redisClusterConfiguration.setMaxRedirects(maxRedirects);
redisClusterConfiguration.setPassword(password);
return new LettuceConnectionFactory(redisClusterConfiguration);
}
@Bean
@Primary
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(lettuceConnectionFactory());
return redisTemplate;
}
}
Redis 자료구조 및 get/set 관련 메소드
자료구조 | 설명 | get | set | del |
Strings | 문자(String), Binary 유형 데이터를 저장 | get mget |
set mset |
del |
Lists | 하나의 Key에 여러 개의 배열 값을 저장 | lrange | lpush (왼쪽) rpush (오른쪽) |
lpop (왼쪽) rpop (오른쪽) |
Sets | 정렬순서가 없는 String타입 | smembers | sadd | srem |
Hashes | 하나의 Key에 여러 개의 Field와 Value로 구성된 테이블을 저장 | hget hmget |
hset hmset |
hdel |
Sorte Sets | Set과 Hash가 결합 | zrange | zdd | zrem |
Bitmaps | 0과 1로 표현하는 데이터 타입 | getbit | setbit | |
HyperLogLogs | Element 중에서 Unique한 개수의 Element만 계산 | pfcount | pfadd | |
Geospatial | 좌표 데이터를 저장 및 관리하는 데이터 타입 | geoadd | geopos geodist georadius georadiusbymember |
- 더 자세히 알아보기
RedisTemplate Method 문서 링크
Docker를 통한 Redis Container 생성을 통한 연동
# docker image 다운로드
=> docker image pull redis:5.0 (상황에 맞게 버전선택가능)
# docker 컨테이너 생성
# -v [redis.conf local저장경로:/usr/local/etc/redis/redis.conf]를 통해 AUTH 설정
# --appendonly yes : AOF 디스크 쓰기 방식 적용
# 아래 명령어 실행전, redis.conf파일을 생성해야함.
=> docker run --name test-redis -d -p 6379:6379 -v /Users/we/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /Users/we/wemakeprice/data/ep-redis:/data redis:5.0 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
# (!) local저장경로는 개인의 PC에 맞게 설정해주어야 함.
이렇게 설정하게되면, 컨테이너가 종료 & 삭제되어도 데이터가 지속적으로 남게되며, Spring Boot에서 발생하는 AUTH 오류를 해결한 상태에서 진행이 가능하다.
# bash를 통한 redis-cli 접속
=> docker exec -it test-redis bash
컨테이너 안에서
=> redis-cli
입력하면 redis command line을 입력할 수 있다.
(!) AOF 디스크 쓰기 관련 참고링크
redis.conf 설정
# SECURITY
requirepass 1234
# PORTS
port 6379
# CLIENTS
maxclients 1000
# Persistence(지속성)
dbfilename dump.rdb
dir ./
(!) redis.conf 관련 참고링크
Redis Tool UI
'SpringFramework > Spring' 카테고리의 다른 글
Spring - Mybatis FrameWork 여러 스키마 적용하기 (0) | 2022.02.08 |
---|---|
Spring - 인스턴스 변수 참조 (0) | 2021.10.20 |
Spring - Validation (0) | 2021.10.20 |
Spring - ErrorController (0) | 2021.10.15 |
Spring - Filter, InterCeptor, AOP (0) | 2021.10.13 |