Redis의 속도와 유연성은 개발자를 위한 매우 강력한 도구이며 다양한 방법으로 사용할 수 있습니다. Redis는 종종 키-값 저장소라고 하지만 5가지 다른 데이터 구조 유형도 지원하므로 데이터 구조 서버로 훨씬 더 잘 설명됩니다.
- 문자열
- 해시
- 목록
- 세트
- 정렬된 세트
각 구조 유형에는 공유 명령과 특정 구조 유형에 고유한 일부 명령이 있습니다.
이 소개에서는 Redis를 사용하는 방법에 대한 기본 사항과 다양한 데이터 구조에 대한 개요를 다룹니다. Redis에는 작성 당시 160개가 넘는 명령이 있으며 redis.io/commands에서 훌륭한 문서를 찾을 수 있다는 점을 염두에 두기는 하지만 좀 더 기본적인 명령을 다룰 것입니다.
Redis 시작
Redis용 ObjectRocket에서 제공하는 인스턴스를 사용하거나 Redis를 로컬에 설치하세요.
로컬에 설치하려면 코드를 다운로드, 추출 및 컴파일하십시오.
$ wget https://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
로컬 인스턴스 시작:
$ src/redis-server
Redis 사용
이제 내장 클라이언트를 사용하여 Redis와 상호 작용할 준비가 되었습니다. Redis용 ObjectRocket 인스턴스의 경우 호스트 이름, 포트 및 비밀번호로 redis-cli를 시작합니다.
$ redis-cli -h my-host -p 1234 -a mypassword
로컬 인스턴스를 사용하는 경우 호스트는 localhost이고 기본 포트는 6379이며 기본적으로 비밀번호는 없습니다.
$ redis-cli
GET 및 SET
가장 간단한 수준에서 Redis는 키-값 저장소로 설명할 수 있습니다. SET foo bar 명령을 실행하여 foo 값을 bar로 설정합니다. 예를 들어 방금 시작한 redis-cli에서 다음 명령을 실행합니다.
redis> SET foo bar
OK
이제 GET 명령으로 foo의 값을 읽으십시오.
redis> GET foo
"bar"
만료 및 TTL
EXPIRE 명령을 사용하여 지정된 시간 내에 만료되도록 키를 설정할 수 있습니다. TTL은 키가 만료되기까지 남은 시간을 보고합니다.
redis> SET foo bar
OK
redis> EXPIRE foo 120
(integer) 1
redis> TTL foo
(integer) 113
목록
Redis의 차별화된 기능 중 하나는 키의 값이 단순한 값이 아니라 데이터 구조일 수 있다는 것입니다.
목록을 만들려면 LPUSH 또는 RPUSH를 사용하십시오. 목록이 이미 존재하는 경우 LPUSH는 주어진 값을 목록의 시작 부분에 추가하고 RPUSH는 목록 끝에 추가합니다.
redis> LPUSH cities "San Francisco"
(integer) 1
redis> RPUSH cities "Austin"
(integer) 2
redis> LRANGE cities 0 -1
1. "San Francisco"
2. "Austin"
redis> SORT cities alpha
1. "Austin"
2. "San Francisco"
redis> LPOP cities
"San Francisco"
redis> LRANGE cities 0 -1
1. "Austin"
SORT 명령은 ALPHA 인수를 사용하여 오름차순으로 사전순으로 목록을 정렬합니다. 내림차순으로 정렬하려면 DESC 인수를 SORT 명령에 추가하십시오.
RPOP 명령은 목록의 끝에서 요소를 팝합니다. LPOP는 목록의 시작 부분에서 요소를 팝합니다.
세트
집합은 각 요소가 한 번만 발생할 수 있다는 점을 제외하고 목록과 유사합니다. 아래 예에서는 작은 미국 주 집합을 만듭니다. SADD 명령은 항목이 세트에 이미 존재하지 않는 한 항목을 세트에 추가합니다. 항목이 존재하지 않으면 추가되고 1이 반환됩니다. 그렇지 않으면 0이 반환됩니다. SMEMBERS는 세트의 모든 항목을 반환합니다. SCARD는 집합의 요소 수를 반환합니다. SREM은 목록에서 항목을 제거합니다.
redis> SADD states "Vermont"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
redis> SADD states "Texas"
(integer) 1
redis> SCARD states
(integer) 2
redis> SADD states "Vermont"
(integer) 0
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
redis> SADD states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
3. "California"
redis> SREM states "California"
(integer) 1
redis> SMEMBERS states
1. "Vermont"
2. "Texas"
해시
해시를 사용하여 문자열 값을 각 키의 필드에 할당하고 매핑할 수 있습니다. 몇 개의 필드가 있는 해시는 공간을 거의 차지하지 않는 방식으로 저장되므로 작은 Redis 인스턴스에 수백만 개의 객체를 저장할 수 있습니다. 아래 예에서 user:1의 이름은 HSET을 사용하여 "john racker"로 설정됩니다. 명령. HGET 명령은 사용자의 이름 값을 가져오는 데 사용됩니다. HGETALL은 지정된 키와 관련된 모든 키와 값을 반환합니다.
redis> HSET user:1 name "john racker"
(integer) 1
redis> HGET user:1 name
"joe racker"
redis> HSET user:1 company "objectrocket"
(integer) 1
redis> HGET user:1 company
"ObjectRocket"
redis> HSET user:1 city "austin"
(integer) 1
redis> HGET user:1 city
"austin"
redis> HGETALL user:1
1. "name"
2. "john racker"
3. "company"
4. "objectrocket"
5. "city"
6. "austin"
정렬된 세트
정렬된 집합은 모든 구성원이 점수와 연결되어 있지만 반복되지 않는 문자열 모음이라는 점에서 집합과 유사합니다. 정렬된 세트는 점수를 기준으로 오름차순으로 정렬됩니다. 동일한 요소는 한 번만 존재하며 점수는 반복될 수 있지만 반복되는 요소는 허용되지 않습니다.
이 예에서는 2014년 10월 23일 현재 영국 프리미어 리그 상위 5개 팀의 총 점수를 추가합니다.
redis> ZADD EPL 22 "chelsea"
(integer) 1
redis> ZADD EPL 17 "man city"
(integer) 1
redis> ZADD EPL 16 "southampton"
(integer) 1
redis> ZADD EPL 13 "liverpool"
(integer) 1
redis> ZADD EPL 13 "west ham"
(integer) 1
redis> ZRANK EPL "chelsea"
(integer) 3
redis> ZRANK EPL "liverpool"
(integer) 0
redis> ZRANK EPL "arsenal"
(nil)
다음으로 ZRANGE를 사용하여 총 점수를 기준으로 팀 순위를 매깁니다.
redis> ZRANGE EPL 0 -1
1) "liverpool"
2) "west ham"
3) "southampton"
4) "man city"
5) "chelsea"
redis> ZRANGE EPL 2 3
1) "southampton"
2) "man city"
세트는 오름차순으로 정렬되므로 총 점수를 기준으로 팀 순위를 보려면 ZREVRANGE를 사용해야 합니다.
redis> ZREVRANGE EPL 0 -1
1) "chelsea"
2) "man city"
3) "southampton"
4) "west ham"
5) "liverpool"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "man city"
4) "17"
5) "southampton"
6) "16"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"
다음으로 Southampton은 게임을 하고 승리하여 3점을 얻습니다. ZINCRBY를 사용하여 점수를 높이고 ZREVRANGE를 사용하여 Southampton이 리그에서 어떻게 2위로 이동했는지 확인합니다. ZREVRANK를 사용하여 Southampton의 순위를 볼 수도 있습니다. 참고:순위는 0부터 시작하며, 이는 가장 높은 점수를 받은 회원(Chelsea)의 순위가 0임을 의미합니다.
redis> ZINCRBY EPL 3 "southampton"
"19"
redis> ZREVRANGE EPL 0 -1 WITHSCORES
1) "chelsea"
2) "22"
3) "southampton"
4) "19"
5) "man city"
6) "17"
7) "west ham"
8) "13"
9) "liverpool"
10) "13"
redis> ZREVRANK EPL "southampton"
(integer) 1
redis> ZREVRANGEBYSCORE EPL 25 (15
1) "chelsea"
2) "southampton"
3) "man city"
앞으로 몇 주 동안 Redis와 이 놀랍도록 다재다능한 개발자 도구의 몇 가지 사용 사례에 대해 자세히 알아볼 것입니다. Redis 실행에 대해 질문이 있거나 애플리케이션 스택에서 Redis를 어떻게 사용하고 있는지 알려주고 싶은 경우 연락해 주십시오.