개발하면서/코드보면서
-
Slowlog개발하면서/코드보면서 2012. 10. 4. 00:02
Slowlog는 지정한 시간이 넘어서는 command를 기록해서 나중에 관리차원에서 볼수있게 해줍니다. 설정으로 slowlog-log-slower-than, slowlog-max-len을 설정합니다. slowlog-log-slower-than는 microseconds단위로써, 지정한 시간보다 느린 command를 기록합니다. threshold같은거죠.음수로 지정하면 slowlog를 사용하지 않고, 0으로 하면 모든 command를 기록합니다.slowlog는 list 자료구조에 저장하는데, 이 List의 최대 크기를 지정하는 설정이 slowlog-max-len 입니다. (검색하면서 알았는데, MySQL Slow Query log 란게 있었네요. 이젠 소스 분석하는만큼 직접 만들어보는것도 시간을 쏟아야겠어요..
-
Bit operation개발하면서/코드보면서 2012. 10. 4. 00:02
Redis 2.6부터 Bit operation이 지원되었습니다. BITOP [NOT | AND | OR | XOR ], BITCOUNT, SETBIT, GETBIT 입니다. Bit operation에 쓰이는 자료형은 String입니다. String이 512MB가 제한입니다.그래서 bit offset 의 최대 길이는 0 ~ (512*1024*1024*8 -1 )입니다. SETBIT, GETBIT, BITCOUNT, BITOP 순으로 진행하겠습니다. 우선 SETBIT는 "SETBIT key offset bitvalue(0 | 1)" 입니다.offset이 위에서 말한 bit 범위인지, bitvalue는 맞게 들어왔는지 검사합니다. 그 후에 해당 key가 기존 DB 존재 여부를 판단하고, 없으면 String형을..
-
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..