2023.04.09
개발환경구성
- FE: React-Native
- BE: WebFlux
- DB: MySQL, Redis(Docker)
- IDE: Android Studio, SpringBoot(2.7.3)
- JDK: 11
- SERVER: AWS
의존성 추가(build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'
}
1) WebFlux는 리액티브 프로그래밍이므로 redis-reactive Jar가 추가로 필요함
Redis 설정파일 (RedisConfig.java)
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.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory("호스트", 포트);
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
1) Redisson, Lettuce, Jedis 중 서버환경에 맞는 Redis Client를 사용
i) Redisson: Netty기반(비동기 이벤트 지원). 쓰기 까다로움. Lock지원. PipeLining지원.
ii) Lettuce: Netty기반(비동기 이벤트 지원). 높은 성능. 낮은 지연시간. PipeLining지원(Redisson 보다 뛰어남).
iii) Jedis: 동기처리. PipeLining지원(동기처리이므로 성능이 뛰어나지 않음)
※파이프라이닝(PipeLining): 여러 개의 명령어를 하나의 Request로 묶어 처리하는 기능. Queue에 Request를 추가한 후 순서대로 처리함.
2) LettuceConnectionFactory 객체로 Redis와 연결 생성
3) 생성된 연결로 RedisTemplate 인스턴스 생성
출처: 데엔잘하고싶은데엔
String.Key-Value SET
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
/**
* @Desc Router에 정의된 URL과 매핑된 메소드명을 Handler 메소드로 작성
*/
@Component
public class Handler {
@Autowired
private StringRedisTemplate redisTemplate;
public Mono<ServerResponse> redisSessionTest(ServerRequest request) {
ValueOperations<String, String> ops = redisTemplate.opsForValue();
ops.set("TJOO", "DEVELOG FOR AA");
Map<String, String> map = new HashMap<>();
map.put("SESSION.PUT.KEY", ops.get("TJOO"));
return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM).body(Mono.just(map), HashMap.class);
}
}
1) Autowired 또는 getBean으로 redisTemplate 객체 주입
2) redisTemplate.opsForValue() API를 사용해 Key와 Value의 자료형을 String으로 선택
redis-cli
# bash 실행
[AWS계정@IP주소]$ sudo docker exec -it redis-container /bin/bash
# redis-cli 실행
[bash:/data]$ redis-cli
# String Key 조회
127.0.0.1:6379> keys *
1) "TJOO"
# String Value 조회
127.0.0.1:6379> get TJOO
1) "DEVELOG FOR AA"
1) Redis 데이터베이스와 상호작용할 수 있는 Redis Command Line Interface(CLI) 도구
2) Redis 서버에 연결하여 데이터를 조회, 수정, 삭제 등의 기능을 사용
3) keys, get 등의 명령어를 사용해 저장된 값 조회(*은 모든값 조회)
이전포스팅
'데이터베이스' 카테고리의 다른 글
[레디스] 스프링4.0 레투스 풀 설정(XML, JAVA) 샘플코드 (2) | 2023.12.22 |
---|---|
[Redis] 스프링4.0 xml 설정파일을 사용한 레디스 센티널 연결 (0) | 2023.10.09 |
[Redis] Redis Starts with Docker And WebFlux(1) (0) | 2023.04.02 |
[DB]SELECT - ORDER BY, WHERE, JOIN (0) | 2021.06.11 |
[DB] SyBase에서 사용하는 기능들 (0) | 2021.03.29 |
댓글