이것이 레디스다
DESCRIPTION
책 "이것이 레디스다"에 서술된 내용을 정리하여 간단한 슬라이드로 만들었습니다. 참고하세요.TRANSCRIPT
이것이 레디스다- 특징과 활용사례
About Me
Kris jeong( 정경석 )
이것이 레디스다 (2013) 레디스 2.6 에 대한 활용서적
개발 경력 15 년 . 웹 서비스 개발 .
메시징 서버 개발 .
추천 서비스 개발 .
다양한 NoSQL 활용 연구중http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8968480591
레디스란 ?
레디스는 In-Memory Database
다양한 데이터 타입 지원
영구 저장소 지원
키 - 값 모델 NoSQL
IMDB(In-Memory DB)
Query Engine Query Engine
Storage Man-ager
Memory(Cache)
Disk Disk
Memory
메모리 기반 저장소디스크 기반 저장소
속도
데이터 내구성 Disk is optional
레디스는 캐시 서버인가 ?
레디스는 캐시 서버가 아닌 저장소
하지만 캐시 서버로 활용 가능
저장소 기능을 Off 하면 됨 .
설치와 테스트$ wget http://download.redis.io/redis-stable.tar.gz$ tar xvf redis-stable.tar.gz$ cd redis-stable$ make……done.
$ make test
※ CentOS 6.4 64bit
특징
무지 빠르다 (TPS)
$ ./src/redis-benchmark --csv -d 1024"PING_INLINE","34602.07""PING_BULK","35971.22""SET","35211.27""GET","31347.96"…"LPUSH (needed to benchmark LRANGE)","32467.53""LRANGE_100 (first 100 elements)","4714.76""LRANGE_300 (first 300 elements)","1605.91""LRANGE_500 (first 450 elements)","1030.93""LRANGE_600 (first 600 elements)","735.13""MSET (10 keys)","22471.91"
※ CentOS 6.4 64bit, Core i5 [email protected]
특징 - expire
지정된 시간 후에 만료 expire user:212:cart 259200
It will be expired 3 days later.
만료 시간 지정 expireat user:212:item:sward 1388534400
It will be expired 2014/01/01
초 단위 만료 Countdown
유닉스 타임스탬프
지원 데이터 타입
문자열 데이터
user:1:cart_info
{ "product": { "id": "2951", "name": "testing 01", "options": { "color": "red" }, "quantity": 4 }}
※ Up to 512MB
키 값
지원 데이터 타입 (cont.)
해시 데이터
item:1:info
name bastard sword
min dam-age
13
max dam-age
20
durability 32/50
price 3500
durability 31/50
새로운 필드와 값 추가
필드 값키
지원 데이터 타입 (cont.)
해시 데이터
item:1:info
name bastard sword
min dam-age
13
max dam-age
20
durability 32/50
price 3500
name bastard sword
min dam-age
13
max dam-age
20
durability 31/50
price 3500
필드 값키
지원 데이터 타입 (cont.)
리스트 데이터
user:1:message
how r you.hi~
bye.
새로운 요소 추가
키 요소
지원 데이터 타입 (cont.)
리스트 데이터
user:1:message
how r you.hi~ bye.
키 요소
지원 데이터 타입 (cont.)
셋 데이터
user:1:friend
kris
mike
frank
martin
tom
chris
새로운 요소 추가
kris
mike
frank
martin
tom
chris
지원 데이터 타입 (cont.)
셋 데이터
user:1:friend
kris
mike
frank
martin
tom
1 kris
91 mike
200 frank
250 martin
251 tom
지원 데이터 타입 (cont.)
정렬된 셋 데이터
user:ranking
220 chris
새로운 가중치와 값 추가
가중치 값키
1 kris
91 mike
200 frank
250 martin
251 tom
1 kris
91 mike
200 frank
220 chris
250 martin
251 tom
지원 데이터 타입 (cont.)
정렬된 셋 데이터
user:ranking
가중치 값키
특징 – RDB(Snapshot)
Redis data
Redis instance
Dump file(Redis-.rdb)
Snapshot 이벤트 발생
Data dumpto disk
레디스에 저장되는 데이터 크기와 물리 메모리의 비율 고려 리눅스 운영체제의 vm.overcommit_memory=1 설정 확인 Swap/snapshot 에 대한 DISK I/O 가 많아질 수 있음 .
레디스 snapshot 사용시 고려사항
특징 – AOF(Append Only File)
Redis data
Redis instance
appendon-ly.aof
Command logging
Redis client
데이터 저장 / 수정 명령
적당한 디스크 용량과 IO 속도를 보장해야 함 .
레디스를 재시작할때 RDB 보다 느리게 시작됨 .
레디스 AOF 에 대한 고려사항
복제 – Single slave
Redis cluster
Slave NodeMaster Node
Redis client
set key1 ‘test value’
set key1 ‘test value’
Replication
key1 test value key1 test value
복제 – Multiple slave
Master Node
Redis cluster
Redis client
쓰기
Replication
읽기
Slave Node 2
Slave Node 1
Slave Node 3
복제 – Multiple slave (cont.)
Master Node
Redis cluster
Slave Node 2
Redis client
쓰기
Slave Node 1
Slave Node 3 Slave Node 4
1st Replication
2nd Replication
Redis client
읽기
샤딩 – 범위 지정
Shard 1
Master Node
User Key 1 ~ 100
User Key 1~50 User Key 51~100
Shard 2
Master Node
Slave Node Slave NodeSlave Node Slave Node
● 데이터 범위를 기준으로 샤딩
샤딩 - 수직
Shard 1
Master Node
User info Content
Shard 2
Master Node
Slave Node Slave NodeSlave Node Slave Node
● 데이터 스키마를 기준으로 샤딩
Key % Number of Shard(Key % 2)
샤딩 - 해싱
Shard 1
Master Node
User Key 1 ~ 100
Shard 2
Master Node
Slave Node Slave NodeSlave Node Slave Node
● 키의 해시값을 기준으로 샤딩
Sharding Calc
…
샤딩 – 레디스 클라이언트 사용
Redis client
Shard 1 Shard N
읽기 / 쓰기 읽기 / 쓰기
레디스는 서버측 샤딩을 지원하지 않으므로 클라이언트가 구현 .
대부분의 레디스 클라이언트는 클라이언트측 샤딩을 지원 .
장비 증설 / 제거시 재 샤딩을 위한 전략 수립 필요
레디스 샤딩 사용시 고려사항
활용 사례
일간 로그인 사용자 수 계산 주간 로그인 사용자 수 계산 일주일간 한번이라도 로그인한 사용자 수 계산
10 억 사용자에 대한 실시간 PV/UV
클릭 수 기준 인기 게시물 목록 댓글 수 기준 인기 게시물 목록
실시간 인기 게시물 목록 구하기 .
점수 기준 Top 10 랭커 목록 최근 접속 사용자 목록
실시간 게임 랭킹
데모