Lettuce Multi Data Source

Redis Developer Course Redis Technical Support Redis Enterprise Server

Lettuce Multi Data Source

Lettuce RedisClient를 이용해서 Redis Standalone, Master-Replica, Sentinel, Cluster 각 데이터 소스(서버)에 연결하고 메소드(명령)을 실행하는 방법을 설명합니다.

Project 생성: start.spring.io

Spring Boot: 3.1.4
Spring: 6.0.12
Lettuce: 6.2.6
Redis: 7.0.10

Lettuce Multi Data Source project

application.properties

  • redis.masterReplicas: 마스터와 복제노드를 구분하지 않고 일렬로 나열했다. MasterReplica.connect()에서는 마스터와 복제노드를 구분하지 않고 설정한다.
  • redis.sentinel.redisPassword: 센티널이 모니터(관리)하는 레디스 서버의 password를 구분해서 지정했다.
  • 센티널 서버의 password는 설정하지 않는다. 설정하면 센티널에 연결할 수 없습니다. 접속 문자열(redis-sentinel://password)는 레디스 서버의 password를 지정하는 것입니다.

Main Class: LettuceMultiDataSourceApplication

Class RedisConfig

  • application.properties에서 콤마(,)로 구분된 서버 정보(IP:Port)를 읽어 올 때는 Set<String> masterReplicas, sentinelNodes, clusterNodes를 사용합니다.
    주의: 서버 정보(IP:Port)를 String으로 읽어서 StringUtils.split(replicas, ",")를 사용해서 구분할 경우 IP 앞에 space가 붙어서 서버 연결이 되지 않습니다.
  • RedisClient 생성과 연결(connect)는 각 Repository에서 합니다. 각 Repository에서 연결하는 것이 더 적절합니다.
  • ReadFrom getReadFrom(): application.properties에서 readFrom을 읽어서 Lettuce의 ReadFrom으로 변환합니다.

Class RedisStandaloneRepository - 단독 서버 레파지토리

RedisClient를 생성하고 레디스 서버에 연결합니다.

Class RedisMasterReplicaRepository - 마스터-복제 서버 레파지토리

RedisClient를 생성하고 마스터, 복제 서버에 연결합니다.
노드 수만큼 아래과 같은 연결문자열을 만들어서 RedisURI.create(uri) 생성합니다.

uri = "redis://password@ip:port?&clientName=clientName"

Class RedisSentinelRepository - 센티널 레파지토리

  • RedisClient를 생성하고 센티널에 연결합니다. 센티널에 연결해서 레디스 정보를 얻어와서 레디스 서버에 연결합니다. 그러므로 레디스 서버의 정보(ip:port)를 제공할 필요가 없습니다.
  • 센티널 서버의 password는 설정하지 않는다. 설정하면 센티널에 연결할 수 없습니다. 접속 문자열(redis-sentinel://password)는 레디스 서버의 password를 지정하는 것입니다.
  • redisClient.connectSentinel(): 센티널에 접속합니다. 센티널 명령을 실행합니다.
  • MasterReplica.connect(): 센티널이 모니터(관리)하는 레디스 서버에 연결합니다. 레디스 명령을 실행합니다.

Class RedisClusterRepository - 클러스터 레파지토리

RedisClusterClient.create(): 레디스 서버에 연결합니다.

Class RedisController

  • @GetMapping("/standalone/save/{key}"), @GetMapping("/standalone/get/{key}"): 단독 서버 저장, 조회
  • @GetMapping("/standalone/saveAsync/{key}"), @GetMapping("/standalone/getAsync/{key}"): 단독 서버 비동기 저장, 조회
  • @GetMapping("/masterReplica/save/{key}"), @GetMapping("/masterReplica/get/{key}"): 마스터-복제 저장, 조회
  • @GetMapping("/sentinel/save/{key}"), @GetMapping("/sentinel/get/{key}"): 센티널-레디스 서버 저장, 조회
  • @GetMapping("/sentinel/info"): 센티널 서버 info 명령 실행(레디스 서버 아님)
  • @GetMapping("/cluster/save/{key}"), @GetMapping("/cluster/get/{key}"): 레디스 클러스터 서버 저장, 조회


<< Spring Multi Data Source Lettuce Multi Data Source Spring Project Create >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.