728x90
개 요
Redis와 Spring을 연동하여 Redis 활용 방법을 정리
Redis가 설치 되어 있따는 전제하에 작성 하였으며, 설치는 아래 URL 참고
URL : https://sh-it-work.tistory.com/15
TEST 환경 정리
구 분 | SW | Version |
OS | Ubuntu | 22.0.4LTS |
SW | Redis | v7.0.2 |
SW | Tomcat | v9.0.78 |
SW | Java | v11.0.9 |
SW | postgre | v15.2 |
FW | Spring Boot | v2.7.12 |
FW | Intellij | - |
Redis 연동 설정
Build.gradle
Redis를 사용하기 위한 의존성 작성
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}
application.yml
Redis 서버 IP, Port 설정
### redis setting
spring.redis.host=${REDIS_SERVER_IP}
spring.redis.port=${REDIS_SERVER_PORT}
application.yml내 Redis 변수
변 수 | 기본값 | 설 명 |
spring.redis.database | 0 | ConnectionFactory에 사용되는 데이터베이스 인덱스 |
spring.redis.hosts | localhost | Redis Server IP |
spring.redis.password | - | Redis Server login Password |
spring.redis.port | 6379 | Redis Server Port |
spring.redis.pool.max-active | 8 | Pool에 할당될 수 있는 커넥션 최대 수(음수는 무제한) |
spring.redis.pool.max-idle | 8 | Pool의 "Idle" 커넥션 최대 수(음수는 무제한) |
spring.redis.pool.max-wait | -1 | Pool이 바닥났을 때 예외 발생 전에 커넥션 할당 차단의 최대 시간(단위 : ms, 음수는 무제한 차단) |
spring.redis.pool.min-idle | 0 | Pool에서 관리하는 Idle 커넥션의 최소 수(양수만 유효) |
spring.redis.timeout | 0 | Connection Timeout(단위 : ms) |
BEAN 등록
RedisConfig.Class 작성 (Sample Source)
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
// key:value 형태인 경우 시리얼라이저
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
//Hash 값 사용하는 경우 시리얼라이저
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
//default 시리얼라이저
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
연동 확인
- Spring Test Code를 통해 연동 확인
- 정상 연동 시 addkey() 함수에서 지정한 값이 콘솔에 출력되며, Redis Server에서도 해당 key 값을 조회 할 수 있다.
@SpringBootTest
public class RedisConnectionTest {
@Autowired
private RedisTemplate<String, String> redisTemplate;
//key 추가 TEST Code
@Test
public void addkey(){
ValueOperations<String, String> vop = redisTemplate.opsForValue();
vop.set("member1", "inhwan");
vop.set("member2", "minjun");
vop.set("member3", "jongman”);
}
//key 얻어오기 TEST Code
@Test
public void getkey(){
ValueOperations<String, String> vop = redisTemplate.opsForValue();
String value1 = vop.get("member1");
String value2 = vop.get("member2");
String value3 = vop.get("member3");
System.out.println(value1 + value2 + value3);
}
}
- 연동 결과(Console)
- 연동 결과(Redis)
Redis 사용 방법
Spring Boot와 Redis를 연동하여 사용하는 방법은 RedisTemplate와 RedisRepository 2가지가 존재
RedisTemplate
- Spring과 Redis 사이에서 커넥션을 관리
RedisTmeplate에서 제공하는 자료 구조 타입
메서드 명 | Redis Type | 설 명 |
opsForValue | String | String을 쉽게 Serialize/Deserialize 하는 메서드 |
opsForList | List | List를 쉽게 Serialize/Deserialize 하는 메서드 |
opsForSet | Set | Set을 쉽게 Serialize/Deserialize 하는 메서드 |
opsForZSet | Sorted Set | Sorted Set을 쉽게 Serialize/Deserialize 하는 메서드 |
opsForHash | Hash | Hash를 쉽게 Serialize/Deserialize 하는 메서드 |
- 아래 소스는 기본 String 자료형을 처리(Sample)
@Service
public class RedisUtilsService {
private final RedisTemplate<String, Object> redisTemplate;
public RedisUtilsService(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
//redis에 데이터 저장, 만료 시간은 밀리세컨드 단위로 설정
public void setData(String key, String value, Long expiredTime) {
redisTemplate.opsForValue().set(key, value, expiredTime, TimeUnit.MILLISECONDS);
}
//redis 데이터 가져오기
public String getData(String key) {
return (String) redisTemplate.opsForValue().get(key);
}
//데이터 삭제
public void deleteData(String key) {
redisTemplate.delete(key);
}
}
RedisRepository
- Redis Entity 생성(Sample)
@Getter
@Builder
//설정한 값이 Redis의 key값 prefix로 사용됨
@RedisHash(value="redisToken")
public class RedisToken {
@Id
//redis key 값이 되며, redisToken:{id} 위치에 자동 증가 됨
private String authId;
//값으로 검색할 시 사용 됨
@Indexed
private String token;
private String role;
//만료 시간 설정
@TimeToLive
private long ttl;
public RedisToken update(String token, long ttl) {
this.token = token;
this.ttl = ttl;
return this;
}
}
- Redis Repository 생성
@Repository
public interface RedisTokenRepository extends CrudRepository<RedisToken, String> {
Optional<RedisToken> findByToken(String token);
Optional<RedisToken> findByAuthId(String authId);
}
728x90
'DataBase > Redis' 카테고리의 다른 글
[Redis]기능 TEST CLIENTS (0) | 2023.08.07 |
---|---|
[Redis]Redis Cache (0) | 2023.07.20 |
Redis 설정(Security, Client, Memory) (0) | 2023.07.20 |
Redis 데이터 관리 (0) | 2023.07.19 |
Redis 설정(GENERAL) (0) | 2023.07.12 |