xadd
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
返事がかかってなれば、メールでお知らせします。