분류 전체보기
-
문제로 풀어보는 알고리즘 0.3 생각해보기 풀이개발하면서/Algorithm,DS,PS 2012. 8. 29. 16:25
요새 심심할때 문제로 풀어보는 알고리즘책을 보고있습니다. 저같은 초보자한테 참 좋네요 : ) 4년전에 알고리즘 트레이닝북으로 개발에 발을 들여놨던 기억이 나네요. 정말 계란으로바위치기하듯이.......디버깅만 수천번한것같아요 ㅋㅋㅋㅋㅋㅋㅋㅋ (생각없이 무작정 코딩코딩~!! ㅎㅎ) 무튼 이번에 인사이트북에서 이벤트로 아래 이벤트를 열었습니다. 책보면서 생각 했던게 있어서 코딩시작.....;; http://www.insightbook.co.kr/post/3814 #include #include #include int data[] = {1, 2, 3, 4, 5, 6, 7, 8}; void right_rotate(int begin, int end, int k) { int length = end-begin+1; ..
-
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 ..
-
[Redis] Hacking Strings개발하면서/타인글보면서 2012. 7. 31. 18:39
https://redis.io/topics/internals-sds Hacking Strings Redis에서 사용하는 strings는 sds.c에 구현되어 있습니다. (sds는 Simple Dynamic String의 약자다) sds.h에 sdshdr C 구조체로 정의되어있습니다. struct sdshdr { long len; long free; char buf[]; } character형 배열 buf는 실제 문자열이 저장되는 공간입니다. len은 buf에 실제로 저장된 문자열 길이를 저장하고 있고, 이 필드로 인해 문자열의 길이를 조회하는 건 O(1)로 할 수 있습니다. free는 buf에서 추가적으로 사용 가능한 공간을 저장합니다. len과 free 필드는 buf의 메타데이터를 저장하고 있다고 생각..
-
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..