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 사용

기회가 닿으면 각각의 용도에 대하여 좀 더 자세히 언급해 보려고 한다.