1. 개요
일전에 Redis 2.8.6 설치에 대한 글을 올린 적이 있다. 관심있게 본 사람은 별로 없을 것으로 생각한다.
http://sarc.io/index.php/miscellaneous/63-redis-2-8-6
그 이후에 데이터 넣고 빼는 것에 대한 내용을 올린다고 했는데, 그것보다는 우선 좀 더 소개를 해야 할 것 같아 오늘은 좀 더 소개에 가까운 이야기를 해 볼까 한다.
2. 소개
Redis 는 key-value 기반의 NoSQL로 분류할 수 있다. key-value 기반의 NoSQL이라는 것은 여기서는 언급하지 않겠다. (사실 삵에 이 분야에 책까지 번역하신 전문가가 있는 것으로 알고 있다)
* key-value 기반이기 때문에 기존 RDBMS에서 즐겨 사용했을 수 있는 like 검색은 안된다. 정확한 key 값을 알고 있어야 value를 얻을 수 있다.
다소 특이한 점이라면 다른 NoSQL들이 파일 시스템을 사용하는 반면 Redis는 메모리를 사용한다. 다시 말해, 성능이 좋다는 이야기다. 비슷하기도 한 Memcached와 비교되기도 하고, 최근에는 Memcached의 자리를 위협하고 있는 추세이다. fail-over 측면에서 Memcached보다 Redis 가 괜찮다는 평들이 있다.
앞서 메모리를 사용한다고 했는데, 따라서 휘발성이다. 재기동을 하게 되면 데이터는 모두 사라진다.
3. 용도
그러면 이 Redis를 어디에 사용하면 좋을까?
- 데이터 캐시
- 데이터 저장
- 세션
4. 특성
4-1. 삭제
기본적으로 데이터는 삭제되지 않는다. 다만 EXPIRE를 사용하면 삭제 가능하다.
127.0.0.1:6379> SET mykey "Hello" "OK" 127.0.0.1:6379> EXPIRE mykey 10 (integer) 1 127.0.0.1:6379> TTL mykey (integer) 10 127.0.0.1:6379> SET mykey "Hello World" "OK" 127.0.0.1:6379> TTL mykey (integer) -1 127.0.0.1:6379>
만약 EXPIRE 지정 후 expired 되기 전에 get 하면 어떻게 될까?
- 최초 지정한 EXPIRE 시간이 계속 유지될까? (즉, TTL은 계속 즐어듬)
- 아니면 get 하면 그 시점부터 다시 EXPIRE 시간이 설정될까? (자바의 Session 같은 느낌)
127.0.0.1:6379> set sarc-url "sarc.io" OK 127.0.0.1:6379> EXPIRE sarc-url 60 (integer) 1 127.0.0.1:6379> TTL sarc-url (integer) 57 127.0.0.1:6379> TTL sarc-url (integer) 52 127.0.0.1:6379> get sarc-url "sarc.io" 127.0.0.1:6379> TTL sarc-url (integer) 46
중간에 get을 해도 TTL은 계속 줄어든다.
만약 EXPIRE 지정 후 해당 key 값을 다시 set 하면 어떻게 될까?
127.0.0.1:6379> TTL sarc-url (integer) 46 127.0.0.1:6379> set sarc-url "www.sarc.io" OK 127.0.0.1:6379> TTL sarc-url (integer) -1
EXPIRE 설정이 무효화된다.
5. AOF
6. 싱글 스레드 vs 멀티 스레드
Redis는 싱글 스레드일까 멀티 스레드일까?
$ ps -ef | grep redis | grep -v grep ec2-user 7842 7810 0 08:35 pts/0 00:00:00 redis-server 127.0.0.1:6379 $ ps -eLF | grep 7842 | grep -v grep ec2-user 7842 7810 7842 0 4 36829 5024 0 08:35 pts/0 00:00:00 redis-server 127.0.0.1:6379 ec2-user 7842 7810 7843 0 4 36829 5024 0 08:35 pts/0 00:00:00 redis-server 127.0.0.1:6379 ec2-user 7842 7810 7844 0 4 36829 5024 0 08:35 pts/0 00:00:00 redis-server 127.0.0.1:6379 ec2-user 7842 7810 7845 0 4 36829 5024 0 08:35 pts/0 00:00:00 redis-server 127.0.0.1:6379
7. Replica Migration
Replica Migration 기능을 통해 단일 샤드의 복수 노드 장애에 대응 가능하다.
8. 활용
Reference는 다음과 같다.
- 트위터 : 수백 대의 Redis를 사용한다고 한다.
- 텀블러 : Redis 사용
- 인스타그램 : 주요 모듈에 Redis가 사용되고 있다.
- 라인 : Redis 사용
기회가 닿으면 각각의 용도에 대하여 좀 더 자세히 언급해 보려고 한다.