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 답글이 올라오면 이메일로 알려드리겠습니다.

혹시 처음이세요?
레디스게이트에는 레디스에 대한 많은 정보가 있습니다.
레디스 소개, 명령어, SQL, 클라이언트, 서버, 센티널, 클러스터 등이 있습니다.
혹시 필요한 정보를 찾기 어려우시면 redisgate@gmail.com로 메일 주세요.
제가 찾아서 알려드리겠습니다.
 
close
IP를 기반으로 보여집니다.