핵심 데이터실시간

실시간 채팅과 알림

연결된 모든 클라이언트에 메시지를 실시간으로 전달하며, 클러스터를 위한 샤딩된 채널과 기록을 위한 스트림을 지원합니다.

번의 게시, 모든 구독자
1
클러스터용 채널
샤딩
스트림 사용 시
+기록
단계 1 / 5
서버가 구독

각 WebSocket 서버는 연결된 사용자가 있는 방을 구독합니다.

예시 세션playing
# 서버가 구독
hotkv> SUBSCRIBE room:42
1) "subscribe"
2) "room:42"
3) (integer) 1

실제 HotKV 명령과 예시 응답으로 구성된 애니메이션 안내입니다. 원하는 단계를 클릭하면 해당 단계로 이동합니다. 명령과 응답은 HotKV에서 입력하고 보는 그대로 영어로 표시됩니다.

문제

채팅방이나 실시간 알림 피드는 여러 WebSocket 서버에 걸쳐 연결된 모든 사용자에게 한 번에 도달해야 합니다. 데이터베이스 폴링은 너무 느리고 비싸며, 서버들은 무언가 일어났음을 서로 알릴 공유된 방법이 필요합니다.

HotKV의 해결 방식

각 WebSocket 서버는 사용자들이 관심 있는 채널을 구독합니다. 무언가 일어나면 PUBLISH 한 번이 구독 중인 모든 서버에 도달하고, 각 서버가 사용자에게 전달합니다. 샤딩된 채널은 클러스터에서 트래픽을 채널을 소유한 노드에 두며, 각 방 옆의 스트림은 나중에 들어오는 사용자를 위해 기록을 보관합니다.

단계별 설명

명령 하나하나, 무슨 일이 일어나는가

  1. 01

    서버가 구독

    각 WebSocket 서버는 연결된 사용자가 있는 방을 구독합니다.

    SUBSCRIBE room:42
  2. 02

    Alice가 메시지 전송

    Alice의 서버가 한 번 게시합니다. 응답은 메시지를 받은 구독자 수입니다.

    PUBLISH room:42 "{\"from\":\"alice\",\"text\":\"Deploy is green\"}"
  3. 03

    기록 보관

    메시지는 방의 스트림에도 추가되며, 최근 1000개로 제한됩니다.

    XADD room:42:history MAXLEN ~ 1000 * from alice text "Deploy is green"
  4. 04

    Bob이 나중에 재접속

    Bob은 스트림에서 최근 메시지 50개를 읽은 뒤 채널에서 실시간으로 받습니다.

    XREVRANGE room:42:history + - COUNT 50
  5. 05

    클러스터의 샤딩된 채널

    클러스터 모드에서 SPUBLISH는 메시지를 채널을 소유한 노드에 둡니다.

    SPUBLISH room:{42}:typing "alice"
적용 분야

실제 시나리오

팀 채팅과 지원 채팅

메시지가 멤버의 연결을 가진 모든 서버로 전달되며, 스트림이 새로 온 사람에게 이전 메시지를 제공합니다.

실시간 알림

주문 업데이트, 멘션, 경보가 발생하는 순간 브라우저로 푸시됩니다.

협업 앱

커서 위치와 입력 중 표시가 수명이 짧은 채널로 브로드캐스트됩니다.

내장 기능

제공되는 기능

팬아웃

게시 한 번이 모든 구독자에게 도달합니다.

PUBLISHSUBSCRIBE

패턴 구독

room:*을 구독하면 모든 방의 메시지를 받습니다.

PSUBSCRIBE

샤딩된 pub/sub

클러스터에서 채널은 자신을 소유한 노드에 머뭅니다.

SPUBLISHSSUBSCRIBE

기록

채널에 크기 제한이 있는 스트림을 짝지어 사용자가 놓친 메시지를 보관합니다.

XADDXREVRANGE

자주 묻는 질문

pub/sub 메시지는 저장됩니까?

아닙니다. pub/sub는 그 순간 구독 중인 대상에게만 전달합니다. 사용자에게 기록이 필요하면 채널 옆에 스트림을 두십시오.

클러스터에서 동작합니까?

예. 샤딩된 pub/sub(SPUBLISH, SSUBSCRIBE)를 사용하면 각 채널의 트래픽이 해당 채널을 소유한 노드에 머뭅니다.

키가 바뀔 때 알림을 받을 수 있습니까?

예. 키스페이스 알림이 키 변경 이벤트를 게시합니다. 키스페이스 알림 문서를 참고하십시오.

관련 사용 사례

직접 워크로드로 사용해 보십시오

HotKV는 Redis 프로토콜을 사용하므로 기존 클라이언트를 연결해 같은 명령을 그대로 실행할 수 있습니다.