개발하면서/코드보면서
-
Dict개발하면서/코드보면서 2011. 12. 18. 00:45
Dict는 다양한 자료구조를 담는 기본적인 redis의 자료구조입니다. key, value형식으로 되어있고 value에 사용자가 입력한 자료구조(?)들이 들어가게 되죠출처 : http://en.wikipedia.org/wiki/File:Hash_table_5_0_1_1_1_1_1_LL.svg 사용자가 입력한 John Smith, Lisa Smith같은 key값들이 hash function을 통해서 나름 고유한 숫자로 바뀌고 그 숫자들이 키가되고 키마다 value를 가리키고 있습니다. 주목할건 John Smith, Sandra Dee입니다. hash function을 통해 나온값이 동일한 값이 나오는 경우가 있는데(hash collision) 해결 방법중에 하나가 리스트 형식으로 동일한 hash value..
-
Redis 소스를 분석해보자.개발하면서/코드보면서 2011. 12. 11. 08:04
약 1년전 http://dol9.tistory.com/141 http://dol9.tistory.com/132 사회 경험 2년, 개발에 마음을 정한지 4년이 된 그 시점...... 뭔가는 해야겠는데, 주변에 개발하는사람은 없어 물어볼 사람은 없던, 이것저것 다 재미있을것 같은데, 막상 어떤걸 할지 몰라 방황하는 그때, github를 알게되었고, Redis라는 걸 알게되었다. 처음 Redis 소스를 처음본 나는 흥분의 도가니였다. 근데......흥분만 한게 문제......ㅋㅋㅋㅋㅋㅋ 분석을 한다한다 했는데 여지껏 못했다. 1년이 지난 지금 회사에서도 필요하고, 내가 발전하는데도 도움될것 같아 Redis 소스를 하나씩하나씩 분석해보려고 합니다. 1년전, 저와 같은 고민을 하시는 분들에게 조금이나마 도움이 되..
-
String개발하면서/코드보면서 2011. 12. 10. 23:53
sds는 Redis에서 사용하는 문자열 관련 자료구조다 문자열을 붙이고, 메모리가 부족하면 다시 재할당하고....... 비교하고 삭제하고, 이런건 알겠는데 sdshdr의 buf[]의 개념이 뭔지 너무너무 궁금했다 kldp에 질문을 해서 http://kldp.org/node/128629 flexible array member 키워드를 알게 되었고 검색한 결과 두개의 url을 통해 확실히 알게됐다아래 두 url을 읽고, 이해하면 String은 끝~~ㅋㅋㅋ 날로먹네!!! http://minjang.egloos.com/2254472 http://tksssch29.tistory.com/entry/Flexible-array-member minjang님 blog에서 포인터로도 가능한걸 보여주면서 지역성 문제를 예로 ..
-
List개발하면서/코드보면서 2011. 11. 17. 01:28
Redis에서 사용하는 기본 List구조는 우리가 아는 Doubly Linked List입니다. (adlist.c) 그런데 List의 구조체가 아래와 같이 생겨먹었습니다. value 3을 저장하게되면 기본으로 value의 크기 + sizeof(list) 만큼의 메모리가 사용되게 됩니다. 이를 아깝게 생각한 두 Redis 커미터는 메모리를 아끼는방법이 없을까.....생각합니다. 그게 ziplist와 zipmap입니다. 여기서는 ziplist에 대해서만 알아보겠습니다. ziplist에 대한 발표자료 4~11 쪽입니다. ziplist의 구조는 다음과 같습니다. zlbyte는 ziplist의 전체 크기로 byte단위이며, 자료형은 unsigned integer입니다. zltail은 tail Entry가 시작 o..
-
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으로 놓고,검사를 하려고 한게 아닐까 생각된다...(그게 ..
-
Hashes개발하면서/코드보면서 2011. 11. 13. 21:09
"foo""bar""hello""world" 위의 모습은 foo : bar, hello : world 를 입력했을때 zipmap에 저장된 구조입니다. zmlen은 zipmap 의 실제 크기입니다. 1 byte를 사용하고, 크기가 254보다 크거나 같으면, 사용하지 않습니다. len은 1 byte 또는 5 byte를 사용합니다. 데이타의 길이가 0~252라면 1 byte가 사용되고, 253이면 다음 4 byte가 data의 길이가 됩니다. 255는 데이타의 끝을 나타냅니다. free는 수정후, 사용안한 byte의 크기를 나타냅니다. unsigned int형으로 8 bit입니다. 만약 8 bit가 넘는다면 zipmap 을 resize하게 됩니다. zmlen len key len free value len k..