Remote Dictionary Server
overview key – value 메모리 저장소 string, set & sorted set, list, hash (다양한 data type 지원) key: String -> value: String key: String -> value: set key: String -> value: sorted set (score를 줄 수있다) key: String -> value: list key: String -> value: hash
data structure entries에 앞에 말한 data type형식으로 데이타가 저장됩니다. 사진 출처 : http://en.wikipedia.org/wiki/Hash_table 한 서버당 hashTable 두개가 한쌍인 구조, 16개 (DB에서 database라고 생각하면 될듯) hashTable이 두개인 이유는 rehash, resize 처리할 때 무정지를 위함
data structure (string) 하나의 key에는 하나의 data type만~!! Hello World mykey
data structure (list) ziplist구조로 저장되겠지만 이해를 위해 linkedlist구조로 표시 mylist Hello World ziplist구조로 저장되겠지만 이해를 위해 linkedlist구조로 표시
data structure ziplist? zipmap? 등장 배경 : list, map 자료구조에서 node를 연결하는 pointer가 필요함. data크기는 1byte인데 pointer가 8byte인 배보다 배꼽이 더 큰 상황 발생
data structure max를 넘으면 어떻게하냐? SO? 최악의 경우 모든 value header를 변경 해야 하므로 list-max-ziplist-entries (default: 1024개) list-max-ziplist-value (default: 32byte) max를 넘으면 어떻게하냐? ziplist였던 구조가 일반적인 linked-list구조로 변환
CRC16(“mykey”)/ number_slot cluster 예제 slot의 개수=10 CRC16(“mykey”)/ number_slot mykey 3
cluster(gossip) 출처 : http://justsimplesomethings.blogspot.com/2011/02/its-bummer-to-get-old.html
cluster(gossip) 자신과 연결된 node중 임의로 정해서 ping/pong, gossip 매초 실행 잘 살고 있냐? 잘 살고 있다. 옆집 김씨는 건강하고, 아랫집 이씨는 어젯밤에 죽었더라. 아….그랬구나…
cluster cluster 설정 시 기록하는 내용 재시작시 아래 설정파일 load~!!
replication slave에서도 query 가능 replication 주기는 master의 save config로 조정 redis 127.0.0.1:6379> lpush mylist "Hello sydney" (integer) 1 redis 127.0.0.1:6379> lpush mylist "Hello seoul" (integer) 2 redis 127.0.0.1:6379> lpush mylist "Hello tokyo" (integer) 3 redis 127.0.0.1:6379> lpush mylist "Hello hongkong" (integer) 4 redis 127.0.0.1:6379> lrange mylist 0 -1 1) "Hello hongkong" 2) "Hello tokyo" 3) "Hello seoul" 4) "Hello sydney" redis 127.0.0.1:6379> connect 127.0.0.1 6380 (empty list or set) redis 127.0.0.1:6379> slaveof 127.0.0.1 6379 OK redis 127.0.0.1:6379> slave에서도 query 가능 replication 주기는 master의 save config로 조정 또는 ‘sync’ query 로 조정 마스터의 rdb 파일을 slave로 복사하고 slave에서는 그 파일을 load 참조 : http://redis.io/topics/replication
persistence AOF? RDB? snapshot 을 기록하느냐, query log를 기록하느냐 차이 RDB 설정 config 파일 [save] [changes] - 여러 개 설정 가능 AOF 설정 appendonly yes appendfsync always appendfsync everysec (default) option appendfsync no
client dummy client smart client 하나의 client는 하나의 서버와 연결. default 1. Client => A: GET foo 2. A => Client: -MOVED 8 192.168.5.21:6391 3. Client => B: GET foo 4. B => Client: "bar" default smart client client가 일정 간격으로 서버의 hash slot 정보를 가져옴 하나의 client가 모든 server와 connection이 이루어져있음 출처 : http://cdmanii.com/721
think… cluster 구성 시 데이터가 균등하게 들어 갈수 있는 방법 cluster, replication 구성 후 auto-failover 방법 update 도중 장애 발생시 복구 방법 모니터링 페이지 개발
reference http://redis.io http://redis.io/presentation/Redis_Cluster.pdf http://redis.io/presentation/Pnoordhuis_whats_new_in_2_2.pdf http://pauladamsmith.com/blog/2011/03/redis_get_set.html http://www.searchtb.com/2011/05/redis-storage.html http://edisonlz.iteye.com/blog/1143851 http://speakerdeck.com/u/peterc/p/redis-steady-go http://antirez.com