-
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에 직접 값을 넣는다.반응형