개발하면서/코드보면서
-
Expires개발하면서/코드보면서 2012. 8. 21. 00:05
http://redis.io/commands/expire 위 링크와 소스를 보고 이해했습니다. expireGenericCommand 함수에서 설정을합니다. expire는 마스터에서만 직접 이뤄집니다. 그리고 (설정시간이 현재보다 이전시간이고, AOF를 로딩하지않고, 마스터일때의 동작)과 (그렇지 않을때의 동작,) 두가지 branch가 나옵니다. 첫번째의 경우는, 이미 시간이 지나간 것이니 삭제를 수행합니다. (networking.c rewriteClientCommandVector 따로 포스팅 해야겠다...) 두번째의 경우는 redisDb의 expires dict에 key를 저장하고 signalModifiedKey를 수행합니다. Redis에서는 Optimistic Lock을 사용합니다. get / set ..
-
Sorted Set개발하면서/코드보면서 2012. 6. 17. 22:39
Sorted Set은 ziplist와 SkipList라는 자료구조를 사용합니다. SkipList자료구조가 생소해서 소스까지 이해하는데 시간이 좀 걸렸던 기억이 나네요;;순서대로 읽으시면 이해하시는데 더 편한것같습니다. 가장 강추는 http://www.slideshare.net/jongwookkim/skip-list ~!! http://www.lsi.upc.edu/~conrado/research/talks/survey-CALIN.pdf search와 insert에 이해가 쉽도록 그려줬음 : ) http://en.wikipedia.org/wiki/Skip_list 수학적인 얘기나오면 무조건 패스~!! 했습니다. 영어가 좀 많다싶어도 패스....(하........멀기만하네요;;) skiplist에 대한 얘기는..
-
persistence AOF개발하면서/코드보면서 2012. 6. 17. 22:38
RDB는 snapshot같이 수행한 순간에 데이타를 파일에 기록합니다.여기서 문제점이 있는데 기록하는 순간에 컴퓨터 파워가 나가거나, kill -9 로 강제 종료한다면, 마지막 정상적인 rdb파일 이후에 들어온 데이타는 잃어버리게 됩니다. 그래서 append-only-fie을 사용하게 됩니다. 제가 생각한 AOF개념은 데이타를 파일에 쓸때 모든데이타를 한번에 쓰지말고( RDB), 버퍼를 만들어서 일정크기, 일정시간동안 입력들어온 데이타는 버퍼에 기록하다가 파일에 붙여 넣자입니다. 소스를 보니까 파일에 기록된 것 이후에 들어온 query는 파일에 append도 하지만 fork후 child process가 현재 dict에 저장되어있는 데이타를 파일에 기록하고, 기록 하는 동안에 client의 명령어들을 ao..
-
Set개발하면서/코드보면서 2012. 6. 17. 22:38
Set은 intset과 hashtable을 사용합니다. hashtable은 hashes에서 설명한것처럼 dict을 사용합니다. intset에 대해 알아보겠습니다. contents에 value값이 들어가고 encoding에는 현재 어떤 int형인지 (INTSET_ENC_INT16/32/64) length에는 현재 저장한 value의 갯수가 저장됩니다. insert할때는 binary search로 해당값이 있는지 확인하고 없으면 min 위치에 값을 저장합니다. 처음에 encoding은 int16_t로 하는데 그 범위에 벗어나는 값이 들어오면 전체 데이타를 다 수정합니다.;;; intsetUpgradeAndAdd 아~~ 같은값이 있으면 뭐 상관없는데, 아니라면 아래 작업을 수행합니다. resize후에 memm..
-
Maxmemory policy개발하면서/코드보면서 2012. 6. 17. 22:37
http://antirez.com/post/redis-as-LRU-cache.html http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/ 위 두개의 글을 참고한다음에 소스를 보면 더 이해가 쉽습니다. (저는 영어가 짧아 굵은글씨만 읽고 바로 소스로;;; 으헝헝~~) Redis는 메모리 기반 key-value시스템입니다. 메모리는 한정되어있기때문에 무한정 데이타를 저장할수가 없죠. 그래서 Redis에서 나름대로 몇가지 방법을 만들었습니다. /* Redis maxmemory strategies */ #define REDIS_MAXMEMORY_VOLATILE_LRU 0 #define REDIS_MAXMEMORY_VOLA..
-
Redis 팀내 공유자료개발하면서/코드보면서 2012. 3. 13. 01:30
이번 프로젝트에 Redis를 적용하려고 Redis에 대해 조사한 자료입니다. Redis를 캐시가 아닌 저장소로 사용하려고했습니다. 조사하고 발표하는중에, Redis가 빠른건 알겠는데, 장애발생시 복구 문제에 대해 이슈가 됐습니다. (expire, flush도 이슈) 데이타가 들어올때 1초에 1000건 이상이 들어오는데 aof, rdb도 이 부분에 대해서는 조금 아쉬웠습니다. 보시고 내용이 이해 안되거나 틀린부분이 있으면 알려주세요. (ppt자료 이쁘게 만들려면 어떻게 하는거죠? 후덜덜) 감사합니다~ : )