전체 글
-
Auth개발하면서/코드보면서 2012. 9. 21. 21:42
Redis의 보안관련해서 소개하겠습니다. http://redis.io/topics/security 위의 문서중에서 rename-command, masterauth/require가 어떻게 동작하는지 알아보겠습니다. 첫째로, rename-command에 대해 알아보겠습니다. 우선 어떤 기능이냐면, 일반적인 client가 특정 명령어를 못하도록 막는 기능을 합니다. SORT나 FLUSHALL, CONFIG같은 명령어는 일반 client가 실행하게 하면 안되겠죠. 사용법은 간단합니다. redis.conf에 rename-command [org command] [new command] ex ) rename-command FLUSHALL kakaka 아래는 실행 화면입니다. populateCommandTable 함수..
-
Pub / Sub개발하면서/코드보면서 2012. 9. 13. 22:16
Pub/Sub는 분산시스템에서 거의 뭐 필수적으로 사용되는 모델입니다. 간단히 말하면 그룹채팅같은거죠... Redis에서는 이 모델을 어떻게 구현했는지 알아보겠습니다. 우선 channel에 참여하는 명령어 SUBSCRIBE는 (pubsub.c:pubsubSubscribeChannel) 를 호출합니다. 엇~?? 이거 어디서 많이 봤습니다. redisClient->pubsub_channels(dict) 에 key : channel, value : NULL을 저장합니다. 그리고 watch와 마찬가지로 해당 server.pubsub_channels에 key와 client를 저장합니다. WATCH와 다른점은 client에서 ilst가 아니라 dict로 정보를 저장하고 있다는점입니다. 서버에는 channel에 접속..
-
transactions개발하면서/코드보면서 2012. 9. 8. 14:42
Redis에는 transaction기능도 있습니다. :) MULTI, EXEC, DISCARD, WATCH, UNWATCH 명령어가 있는데, transaction이 redisClient별 이루어 지는 관계로 우선 redisClient에 대해 먼저 알아보겠습니다. redisClient 구조체는 아래와 같이 생겼습니다. transaction 설명하는데 필요한 변수만 적었습니다. 우선 MULTI, EXEC명령어에 대한 source를 보겠습니다. redisClient 에는 flag라는 변수가 있는데, OR연산을 통해 아래와 같은 정보를 표시합니다. MULTI라는 명령어를 실행하면 별거 없습니다. 해당 client의 flag에 REDIS_MULTI를 표시합니다. (multi.c:multiCommand) MULTI..
-
persistence RDB개발하면서/코드보면서 2012. 9. 3. 00:24
Redis는 두 종류의 persistence기능을 가지고 있습니다. RDB와 AOF가 있습니다. RDB에 대해 알아보겠습니다. snapshot입니다. 끝....은 페인팅이고... RDB는 해당 시점에 저장되어있는 데이타를 모두 iterator로 돌면서 key, value, expire정보들을 파일에 기록합니다. 파일에 기록할때는 rio라는 interface를 사용합니다. 단순합니다. read, write, tell(현재 file pointer의 위치를 리턴), checksum 함수 포인터가 있고, union으로 메모리에 쓸때 사용하는 구조체, 파일에 쓸때 사용하는 구조체가 있습니다. memory인지, 파일인지에 따라서 사용하기 전에 초기화를 해줍니다. 재미진건 rdb에서 crc64를 이용해서 checks..
-
문제로 풀어보는 알고리즘 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에 대한 얘기는..