Redis Steam

Redis Internel Course Redis Technical Support Redis Enterprise Server

Steam

데이터 구조

Stream struct : 40 bytes

Data TypeNameSizeDescription
rax*rax8 bytesId, data(field, value) Rax 포인터
uint64_tlength8 bytestotal data entry 수
streamIDlast_id16 bytes마지막 id
rax*cgroups8 bytesConsumer Group Rax 포인터

StreamID struct : 16 bytes

Data TypeNameSizeDescription
uint64_tms8 bytesUnix time in milliseconds
uint64_tseq8 bytesSequence number

Rax->key

master_id: ms, seq

Listpack

master entrydata entries
fieldsdata entry-1...data entry-N
  • Listpack size: 4kb 또는 100 entries 이하로 구성
  • data entry가 삭제되어도 바로 메모리를 해제하지 않고 listpack 내에 모든 data entry가 삭제되면 listpack 메모리를 해제한다.

Master entry

Listpack 내에서 처음 입력된 데이터의 필드를 저장합니다.
countdeletednum-fieldsfieldslp-count
countdeletednum-fieldsfield-1 ...field-N0
  • count: listpack 내에서 유효한 entry 수
  • deleted: listpack 내에서 삭제된 entry 수
  • listpack 내에서 총 entry 수: count + deleted
  • lp-count: 0, listpack을 역 방향으로 탐색할 때 master entry 임을 나타낸다.

Data entry: same field

데이터가 master entry의 필드와 같으면 value만 저장합니다.
flagsentry-idvalueslp-count
samemsseqvalue-1... value-NN+3
  • flags: same/deleted
  • ms: delta, current id.ms - master_id.ms
  • seq: delta, current id.seq - master_id.seq
  • lp-count: N+3, lp-count를 제외한 필드수

Data entry: diff field

데이터가 master entry의 필드와 같지 않으면 field, value를 저장합니다.
flagsentry-idnum-fields fields & valueslp-count
diffmsseqnum-fieldsfield-1value-1... field-Nvalue-NN*2+4
  • flags: diff/deleted
  • ms: delta, current id.ms - master_id.ms
  • seq: delta, current id.seq - master_id.seq
  • lp-count: N*2+4, lp-count를 제외한 필드수

Stream 구성도



<< Listpack Stream RESP >>

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