ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Object
    개발하면서/코드보면서 2011.11.15 23:33
    redis object에 대해 알아본다
    볼 소스는 redis.h와 object.c 두개의 파일.


    실제 데이타는 void *ptr에 저장되고,  list,hash,set 등에 대한 자료구조 정보를 type, encoding 에 저장한다.




    redis.io 에 object command에 있는걸 캡쳐한 사진이다. 빨간줄은 type, 파랑줄은 encoding 을 뜻한다

    (ziplist, hashtable은 두개 type에 걸쳐있네요)



    언뜻생각하면, encoding으로만 자료형을 구분해도 될것 같은데 굳이...왜 type이라는 자료형을 두었을까????


    나름의 제 생각은 encoding으로 검사하는것보다 비슷한 encoding(자료형)끼리 묶어서 동일한 type으로 놓고,

    검사를 하려고 한게 아닐까 생각된다...(그게 아니면 32 bit 맞추려고....쿨럭;;)





    refcount의 나타나게된 배경은 다음과 같다.

    Redis는 key-value 구조인데, value의 값이 동일한데도 메모리 할당하는게 많이 아깝다고 생각했던 antirez는
    (술 -> 돈, 학교 -> 돈, 노트북 -> 돈  의 key-value가 있을때, value의 값은 '돈'으로 동일하지만 각각 메모리 할당하고 있는걸 아깝다고 생각~!!)
    자주 쓰는걸 미리 만들어놓자~!! 해서~ 그것들을 모아놨다 : ) 이런 센스쟁이. ㅎㅎ

    value가  0~REDIS_SHARED_INTEGERS 에 있으면 sharedObjectsStruct.integers 를 사용.
    LONG_MIN보다 크거나 같고, LONG_MAX보다 작거나 같으면, 메모리 할당 없이 void *ptr에 직접 값을 넣는다.


    TAG

    댓글 0

Designed by Tistory.