spring_masterreplica
Spring Redis Master/Replica
레디스 개발자 교육 신청 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
Spring Redis Master/Replica
이 문서는 Spring Data Redis를 이용해서 레디스 마스터/복제(Master/Replica) 용
Java Spring 애플리케이션을 개발하는 방법을 설명합니다.
Spring Data Redis로 레디스 마스터/복제 서버로 연결할 경우 수동 구성(Manual Config)을 해야 합니다.
자동 구성(Auto Config)는 지원하지 않습니다.
기본 사용법
- ① new RedisStaticMasterReplicaConfiguration(master[0],Integer.parseInt(master[1]))
- RedisStaticMasterReplicaConfiguration을 마스터 IP, Port로 생성합니다.
- ② redisConfig.addNode(node[0].trim(), Integer.parseInt(node[1]))
- 복제 서버들의 IP, Port를 추가해서 구성합니다.
- ③ LettuceClientConfiguration.builder()
- LettuceClientConfiguration을 생성/구성합니다.
readFrom, clientName, commandTimeout 등을 설정합니다. - ④ new LettuceConnectionFactory(redisConfig, clientConfig)
- LettuceConnectionFactory를 생성합니다.
- ⑤ valueOperations.set(key, value)
- 레디스 명령을 실행합니다.
Source code
Master/Replica 구성과 Pub/Sub과의 관계
Master/Replica 구성에서는 Pub/Sub을 사용할 수 없습니다.
자세한 내용은 여기를 보세요
사용하려면 Master에 Standalone으로 연결해서 사용하면 됩니다.
Spring Project
Spring Project 생성
Java Spring Project 생성 URL: start.spring.io
- Project: Gradle-Groovy
- Language: Java
- Spring Boot: 3.1.8
- Project Metadata
- Group: com.redisgate
- Artifact: MasterReplciaSpring -> Project 명칭, 이 이름으로 압축파일이 생긴다.
- Name: Main -> Main Class Name
- Description: Redis MasterReplcia Spring Application -> 설명
- Package name: com.redisgate.redis -> Package Name
- Packaging: Jar
- Java: 17 -> Java 버전 선택
- Dependencies에서 [ADD … CTRL + B] 버튼을 클릭해서 아래 3개를 추가합니다.
- Spring Web
- Lombok
- Spring Data Redis(Access+Driver)
- 마지막으로 [GENERATE CTRL + ⏎ ] 버튼 클릭해서 압축 파일(zip)을 다운받는다.
- 스프링부트3.x 는 자바17 이상, 스프링부트 2.x는 자바11을 사용합니다.
이 프로젝트에 사용된 Spring, Lettuce, Redis 버전
- Spring-Boot: 3.1.8, Spring: 6.0.16
- Lettuce-6.2.7
- Redis-7.2.3
Main Class
application.properties
RedisProps class
application.properties 파일을 읽어오는 클래스.
- master는 String으로, replicas는 List<String>으로 읽어옵니다.
- readFrom 문자열을 ReadFrom 값으로 변경하는 getReadFrom()이 추가되었습니다.
RedisConn class
Redis 서버에 연결합니다.
ConnectTimeout은 ClientOptions을 사용해서 설정합니다.
- 주의: Spring Redis Connection을 이용하면 Application 시작할 때 레디스 서버에 연결하지 않습니다.
그러므로 레디스 서버가 시작되지 않았어도 Application은 시작됩니다.
첫 명령(SET)이 실행되면 Application은 각 레디스 서버(마스터,복제1,복제2)에 다음 명령을 실행합니다.
마지막에 SET 명령 실행용 연결은 종료하지 않고 유지합니다.
다음에 입력 명령이 실행되면 해당 연결(connection)으로 명령을 실행합니다.
connFactory.setShareNativeConnection(true); - 1차 연결
HELLO 3 AUTH default redisgate SETNAME redisgate
ROLE
1차 연결 종료 - 2차 연결
HELLO 3 AUTH default redisgate SETNAME redisgate
CLIENT SETNAME lettuce#MasterReplicaTopologyRefresh
PING NODES
2차 연결 종료 - 3차 연결(마스터에만)
HELLO 3 AUTH default redisgate SETNAME redisgate
SET key01 value-key01
3차 연결 유지 - connFactory.setShareNativeConnection(false);
1,2,3차 연결을 하고 3차 연결도 종료합니다. 따라서 매 명령 실행마다 1,2,3차 연결을 합니다.
Connection Pool을 사용해서 연결별로 별도 스레드를 사용할 경우 설정합니다. 하지만 이 경우에도 성능상 이점은 없습니다.
RedisController class
- SET 테스트: http://localhost:8080/set/key01
- GET 테스트: http://localhost:8080/get/key01
GET 명령이 복제서버에 실행되는 것을 확인하기 위해서 아래와 같이 redis-cli를 실행 후 위 get 명령을 실행합니다.
$ bin/redis-cli -p 6001 -a redisgate --stat - PING 테스트: http://localhost:8080/ping -> 마스터에서 실행됩니다.
<< Pub/Sub | Master/Replica | Sentinel >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.