달력

112017  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
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에 직접 값을 넣는다.


저작자 표시 비영리
신고
Posted by 오산돌구
TAG