XADD

Redis 開発者教育
Redis Developer Course
Redis 定期点検/技術支援
Redis Technical Support
Redis エンタープライズサーバ
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를 생략할 수 있습니다.

특별한 옵션

입력하면서 스트림 최대 개수를 제한하고 싶을 경우 아래와 같이 MAXLEN 옵션을 사용합니다.
XADD sensor-1234 MAXLEN 10 * temperature 100
이 경우 삭제와 추가가 한 오퍼레이션으로 동작하므로 추가만 하는 경우보다 시간이 많이 걸리므로 주의해야 합니다.   이런 경우를 대비한 특별한 옵션이 있습니다.
XADD sensor-1234 MAXLEN ~ 10 * temperature 100
~ 옵션은 삭제할 수 있을 경우만 삭제합니다.


Subquery(서브쿼리) 기능

Field value 부분에 서브쿼리를 사용해서 값을 넣을 수 있습니다.
서브쿼리로 사용할 수 있는 명령은 HGETALL, ZRANGE, ZREVRANGE 입니다.

Example

명령>xadd sensor * (hgetall myhash)
결과>"1559976369499-0"
명령>xadd sensor * (zrange zset 0 -1 withscores)
결과>"1559976378765-0"
서브쿼리 기능은 Enterprise 서버에서 사용 가능합니다.

명령문

XADD key [MAXLEN [~] len] ID field string [field string ...] | (subquery)

  • 이 명령은 version 5.0.0 부터 사용할 수 있다.
  • 논리적 처리 소요시간은 O(log(N))이다. N은 스트림에 이미 저장된 엔트리(ID) 개수이다.
  • ID를 리턴한다.

<< STREAMS Introduction XADD XLEN >>

조회수 :

Email 返事がかかってなれば、メールでお知らせします。