RDB Functions

Redis Server Course Redis Technical Support Redis Enterprise Server

RDB Functions

이 문서는 레디스 버전 5.0.4를 기준으로 작성했습니다.

RDB Loading function과 Save function 비교

rdb loading function compare
    그림 1-1   RDB loading function 비교

RDB Funtion 비교

타입 저장/로드 function: rdbSaveType(), rdbLoadType()

int이지만 1바이트 unsigned char로 저장한다. Data type와 rdb에서 구분자로 사용되는 OPcode를 저장한다.

  • int rdbSaveType(rio *rdb, unsigned char type) --- int rdbLoadType(rio *rdb)
    • rdbWriteRaw(rdb,&type,1) --- rioRead(rdb,&type,1); return unsigned char type

데이터 타입은 아래와 같다.
RDB_TYPE_STRING 0
RDB_TYPE_LIST 1
RDB_TYPE_SET 2
RDB_TYPE_ZSET 3
RDB_TYPE_HASH 4
RDB_TYPE_ZSET_2 5 /* ZSET version 2 with doubles stored in binary. */
RDB_TYPE_MODULE 6
RDB_TYPE_MODULE_2 7 /* Module value with annotations for parsing without the generating module being loaded. */

Object types for encoded objects.
RDB_TYPE_HASH_ZIPMAP 9
RDB_TYPE_LIST_ZIPLIST 10
RDB_TYPE_SET_INTSET 11
RDB_TYPE_ZSET_ZIPLIST 12
RDB_TYPE_HASH_ZIPLIST 13
RDB_TYPE_LIST_QUICKLIST 14
RDB_TYPE_STREAM_LISTPACKS 15

Special RDB opcodes (saved/loaded with rdbSaveType/rdbLoadType).
RDB_OPCODE_MODULE_AUX 247 /* Module auxiliary data. */
RDB_OPCODE_IDLE 248 /* LRU idle time. */
RDB_OPCODE_FREQ 249 /* LFU frequency. */
RDB_OPCODE_AUX 250 /* RDB aux field. */
RDB_OPCODE_RESIZEDB 251 /* Hash table resize hint. */
RDB_OPCODE_EXPIRETIME_MS 252 /* Expire time in milliseconds. */
RDB_OPCODE_EXPIRETIME 253 /* Old expire time in seconds. */
RDB_OPCODE_SELECTDB 254 /* DB number of the following keys. */
RDB_OPCODE_EOF 255 /* End of the RDB file. */

밀리초 저장/로드 function: rdbSaveMillisecondTime(), rdbLoadMillisecondTime()

밀리초를 저장/로드한다. Long long을 사용해서 8바이트를 사용한다. Expire time, Update mstime(Enterprise ver)에서 사용한다.

  • int rdbSaveMillisecondTime(rio *rdb, long long t) --- long long rdbLoadMillisecondTime(rio *rdb, int rdbver)
    • rdbWriteRaw(rdb,&t64,8) --- rdbLoadRaw(rdb,&t64,8)

길이 저장/로드 function: rdbSaveLen(), rdbLoadLen()

데이터의 길이(string), 개수(SET같은 타입의 경우)를 저장한다. 차지하는 바이트수는 값에 따라 다르다.
1byte: 구분자 2bits, 길이 6bits(0~63)
2bytes: 구분자 2bits, 길이 14bits(64~16,383)
5bytes: 구분자 1byte, 길이 4bytes(int)
9bytes: 구분자 1byte, 길이 8bytes(long)

  • int rdbSaveLen(rio *rdb, uint64_t len) --- uint64_t rdbLoadLen(rio *rdb, int *isencoded)
    • rdbWriteRaw(rdb,buf,1/2/(1/4)/(1/8)) --- rdbLoadLenByRef(rdb,isencoded,&len)
                                                                                rioRead(rdb,buf,1+(1/4/8))

값(value)의 데이터 타입 저장/로드 function: rdbSaveObjectType(), rdbLoadObjectType()

val->type 또는 encoding을 위에서 설명한 rdbSaveType(), rdbLoadType()를 사용해서 저장/로드한다.

  • int rdbSaveObjectType(rio *rdb, robj *o) --- int rdbLoadObjectType(rio *rdb)
    • rdbSaveType(rdb,RDB_TYPE_*) --- int type = rdbLoadType(rdb); return type

값(value)을 저장/로드 function: rdbSaveObject(), rdbLoadObject()

robj를 저장/로드한다.

  • ssize_t rdbSaveObject(rio *rdb, robj *o)
  • robj *rdbLoadObject(int rdbtype, rio *rdb)

문자열(string)을 압축해서 저장/로드 function: rdbSaveLzfStringObject(), rdbLoadLzfStringObject()

LZF로 압축/해제한다.

  • ssize_t rdbSaveLzfStringObject(rio *rdb, unsigned char *s, size_t len)
  • void *rdbLoadLzfStringObject(rio *rdb, int flags, size_t *lenptr)

문자열(string)을 저장/로드 function: rdbSaveStringObject(), rdbLoadStringObject()

  • ssize_t rdbSaveStringObject(rio *rdb, robj *obj)
  • robj *rdbLoadStringObject(rio *rdb)

Float/Double를 저장/로드 function

  • Save
  • Load

<< RDB format RDB Functions Replication Intro >>

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