Redis) 이것이 레디스다 3 - 레디스 빨리 시작해보기

레디스 클라이언트 실행

1
2
redis-cli 
127.0.0.1:6379>

기본 명령어

  • String
1
2
3
4
127.0.0.1:6379> set name devson
OK
127.0.0.1:6379> get name
"devson"
  • List

레디스의 리스트 데이터는 논리적으로 링크드 리스트의 구현이다. 이것은 수천만 건이 저장된 리스트 데이터에 하나의 요소를 추가할 때 O(1) 시간 안에 처리할 수 있는 특징이 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> lpush tech java
(integer) 1
127.0.0.1:6379> lpush tech redis
(integer) 2
127.0.0.1:6379> lpush tech linux
(integer) 3
127.0.0.1:6379> lrange tech 0 1
1) "linux"
2) "redis"
127.0.0.1:6379> lrange tech 0 -1
1) "linux"
2) "redis"
3) "java"
  • Set

레디스의 Set 데이터는 순서가 보장되지 않으며 중복을 허용하지 않는 컬렉션이다.

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> sadd friends jason
(integer) 1
127.0.0.1:6379> sadd friends erin
(integer) 1
127.0.0.1:6379> sadd friends eugine
(integer) 1
127.0.0.1:6379> smembers friends
1) "erin"
2) "eugine"
3) "jason"

일반적인 Set의 경우 이렇게 순서가 보장되지 않지만 순서를 가진 Set 데이터를 사용하고 싶을 때는 Sorted Set을 사용하면 된다.

  • Sorted Set

정렬된 Set 데이터를 다루는 명령의 집합이다.
Set 데이터와 동일한 특정을 가지고 추가로 저장된 element에 score (가중치)를 부여해서 score 순으로 정렬한다. (score가 같은 element 간에는 순서를 보장할 수 없다. - 정렬안정성이 없다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
127.0.0.1:6379> zadd ranking 1 devson
(integer) 1

127.0.0.1:6379> zadd ranking 2 chris
(integer) 1

127.0.0.1:6379> zadd ranking 3 brannen
(integer) 1

127.0.0.1:6379> zrange ranking 0 -1
1) "devson"
2) "chris"
3) "brannen"

127.0.0.1:6379> zrange ranking 0 -1 withscores
1) "devson"
2) "1"
3) "chris"
4) "2"
5) "brannen"
6) "3"
  • Hash

Java의 Map과 동일한 구조이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
127.0.0.1:6379> hset person name devson
(integer) 1

127.0.0.1:6379> hset person age 29
(integer) 1

127.0.0.1:6379> hset person lastname son
(integer) 1

127.0.0.1:6379> hgetall person
1) "name"
2) "devson"
3) "age"
4) "29"
5) "lastname"
6) "son"

레디스 성능 측정

레디스는 성능 측정을 위한 redis-benchmark라는 매우 강력한 도구를 자체 제공한다.

redis-benchmark를 실행하면 로그들이 출력되는데 그 중 제일 처음나오는 로그를 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ redis-benchmark 

====== PING_INLINE ======
100000 requests completed in 2.13 seconds # 100,000개의 PING_INLINE 명령을 처리하는데 걸린 시간 : 2.13초
50 parallel clients # 50 클라이언트 동시 접속
3 bytes payload # 저장 데이터 크기
keep alive: 1 # 클라이언트 연결 유지 상태 정보

85.12% <= 1 milliseconds
99.82% <= 2 milliseconds
99.95% <= 3 milliseconds
99.96% <= 4 milliseconds
100.00% <= 4 milliseconds
46882.33 requests per second # 초당 명령 처리 횟수

특정 명령이나 데이터를 변경하는 등의 설정을 옵션을 통해 지정할 수 있다.

옵션 설명
-h 접속할 레디스의 호스트
-p 포트
-c 테스트용 가상 클라이언트 동접 수
-n 각 명령의 테스트 횟수
-d 테스트에 필요한 데이터 크기
-k 테스트용 가상 클라이언트 접속 유지 여부
-r 테스트에 사용할 랜덤 키의 범위
-q 테스트 결과만 출력하기
–csv 결과를 csv 포맷으로 출력하기

redis-cli

레디스의 번들 프로그램으로 간단한 명령어 처리와 데이터 벌크 입력과 같은 다양한 기능을 제공한다.

옵션 설명
-h 접속할 레디스의 호스트
-p 포트
-a 비밀번호
-n DB 인덱스
-c 클러스터 접속 모드 사용 (클러스터링 시 다른 서버의 슬롯에 접근할 수 있다.)
–slave 클러스터의 슬레이브의 연결로 에뮬레이트하여 슬레이븍 받는 명령 목록을 출력한다.

몇가지만 적어놓은 것이고 자세한 내용은 사이트 참고

  • 응답시간 측정
1
2
3
4
redis-cli --latency

redis-cli --latency
min: 0, max: 1, avg: 0.10 (1340 samples)

latency 옵션은 명령이 서버로 저달되고 나서부터 응답이 돌아오기까지의 시간을 측정하는데 쓰인다.

redis-cli --latency-dist : 응답시간을 색으로 표시해준다.

  • 통계 정보 조회

redis-cli info를 하면 많은 정보가 나온다.
info 명령어에 인자를 사용하면 원하는 정보만 따로 확인할 수 있다.

인자 설명
server 서버의 정보
clients 접속된 클라이언츠 정보
memory 메모리 사용량 정보
persistence 영속성 상태 및 정보
stats 키 사용률, 명령 갯쉐 대한 통계 정보
replication replication 정보
cpu CPU 사용 정보
keyspace 저장된 키의 정보

주기적으로 통계 정보를 뽑아야한다면 crontab이나 쉘스크립트를 만들어서 뽑는 편이 났다.

Share