XADD

레디스 개발자 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

스트림에 데이터를 추가

사용법은 XADD key ID field value입니다.
ID는 이전에 입력된 ID보다 항상 큰 값이어야 합니다.
ID는 지정할 수도 있지만 일반적으로 '*'(asterisk)를 사용합니다. 그러면 항상 큰 값이 입력됩니다.

Example

명령>XADD sensor-1234 * temperature 98.7
결과>1538319053569-0
ID는 두 개의 숫자로 구성되는데
<millisecondsTime>-<sequenceNumber>
앞은 millisecond 단위의 timestamp 숫자이고, 뒤 sequenceNumber는 8바이트 정수입니다.
SequenceNumber는 같은 밀리 초 내에 또 데이터가 들어오면 중복을 방지하기 위해서 0, 1, 2, 3 와 같이 하나씩 증가합니다. 그러므로 동일한 밀리 초 내에 생성 될 수 있는 엔트리 수에는 실제적으로 제한이 없습니다.
ID를 *로 입력하는 것은 레디스 인스턴스가 실행중인 서버 시간으로 ID를 생성하는 것입니다.

장애조치(failover) 후 주의사항

마스터 A가 다운되어 클론 B가 마스터로 승격되었을 경우 B 노드의 timestamp가 A 노드 보다 적을 경우 데이터가 입력되지 않습니다. 그러므로 서버들의 시간을 동기화할 필요가 있습니다.

ID를 지정하는 경우

  • 원 데이터에 ID로 사용할 값이 있을 경우에는 ID를 지정하는 것도 좋은 방법입니다. 예를 들어 센서가 밀리초로 데이터를 발생하고 레디스 서버는 1초에 한번 받을 경우 중복될 여지가 없습니다.
  • ID 앞 부분을 생성하는 키를 사용할 수도 있습니다.
    INCR sensor-1234-timestamp
  • XADD sensor-0001 0-1 temperature 101
    ID에 0 또는 0-0은 입력할 수 없습니다.
  • XADD sensor-0001 1000 temperature 102
    SequenceNumber를 생략할 수 있습니다.

옵션

  • NOMKSTREAM
    이 옵션은 새 키를 만들지 않습니다. 이미 있는 키에만 추가합니다. No Make Stream.
    실수로 키를 잘못 만드는 것을 방지합니다.
    버전 6.2에 추가되었습니다.
  • MAXLEN
    입력하면서 스트림 최대 개수를 제한하고 싶을 경우 아래와 같이 MAXLEN 옵션을 사용합니다.
    XADD sensor-1234 MAXLEN 10 * temperature 100
    이 경우 삭제와 추가가 한 오퍼레이션으로 동작하므로 추가만 하는 경우보다 시간이 많이 걸리므로 주의해야 합니다.   이런 경우를 대비한 특별한 옵션이 있습니다.
    XADD sensor-1234 MAXLEN ~ 10 * temperature 100
    ~ 옵션은 삭제할 수 있을 경우만 삭제합니다.
  • MINID
    이 옵션을 사용하면 threshold에 ID를 입력합니다. 입력한 ID보다 작은(미만) 데이터를 삭제합니다.
    버전 6.2에 추가되었습니다.
  • LIMIT
    이 옵션은 삭제될 데이터 수를 제한합니다. 버전 6.2에 추가되었습니다.

명령문

XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|ID field value [field value ...]

  • 이 명령은 version 5.0.0 부터 사용할 수 있다.
  • 버전 6.2에 NOMKSTREAM, MINID, LIMIT 옵션이 추가되었습니다.
  • 논리적 처리 소요시간은 O(log(N))이다. N은 스트림에 이미 저장된 엔트리(ID) 개수이다.
  • ID를 리턴한다.
SQL Insert Redis Enterprise 7.3.0 이상이면 INSERT를 사용해보세요.

<< STREAMS Introduction XADD XADDS >>

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