이전기본적인 push(lpush, rpush)와 pop(lpop, rpop), 약간의 조회 커맨드(lindex, lrange), 리스트 조작 커맨드를 한가지(ltrim) 알아봤습니다. 이번엔 list에 수행할 수 있는, 조금 더 많은 커맨드들에 대해 알아보겠습니다.

BLPOP [key ...] [timeout], BRPOP [key ...] [timeout]

각각 lpop과 rpop의 blocking 버전으로서, blocking pop이라고도 부릅니다. 인자로 전달된 키들을 순서대로 확인하면서, 비어있지 않은 리스트를 먼저 찾은 후 해당 리스트의 가장 첫(blpop), 또는 가장 마지막(brpop) 요소를 pop합니다. list에서 pop할 최소 한 개의 엘리먼트를 발견하거나, timeout을 초과할 때까지 redis 클라이언트가 block됩니다.

위의 예에서, 마지막 blpop 명령은 최대 10초동안(설정된 timeout) blocking되어 있습니다.

  • 그 사이에 key a에 묶여 있는 list에 값이 push된다면, 해당 엘리먼트를 pop하고 명령이 종료됩니다.
  • push되지 않는다면, timeout만큼 기다리다 nil을 반환하고 명령이 종료됩니다.

이러한 blocking pop 명령은 messaging queue나 task queue를 만드는 데에 유용하게 사용할 수 있습니다.

RPOPLPUSH [source_key] [dest_key]

source_key의 리스트에서 가장 마지막 요소를 rpop함과 동시에, 반환 값을 dest_key의 리스트에 lpush합니다. pop할 요소가 없는 경우 (nil)을 반환합니다.

BRPOPLPUSH [source_key] [dest_key] [timeout]

rpoplpush의 blocking 버전입니다.

'데이터베이스 > Redis' 카테고리의 다른 글

[Redis] Pipelining  (0) 2018.09.06
[Redis] String(기본 조작)  (0) 2018.09.06
[Redis] List  (0) 2018.09.06
[Redis] select  (0) 2018.09.06
[Redis] Set  (0) 2018.09.06

Redis에는 value에 대해 많은 데이터 타입들이 존재합니다. set [key] [value] 꼴의 명령을 사용했던 것들은 value에 string이 사용되는데, 이번에는 push/pop을 사용하는 list에 대해 알아보도록 합시다. list를 사용함으로써, redis를 queue처럼 활용할 수 있습니다.

List

List를 사용하면 sequence의 양 쪽 끝에서 요소를 push하고 pop하거나, 개별 요소를 가져오고 list에 수행할 수 있는 다양한 기타 작업을 수행할 수 있습니다. 아래는 가장 많이 사용되는 list 명령들입니다.

  • rpush(rpush [key] [value ...]) : list의 오른쪽 끝에 value들을 추가합니다.
  • lpush(lpush [key] [value ...]) : list의 왼쪽 끝에 value들을 추가합니다.
  • rpop(rpop [key]) : list의 오른쪽 끝에서 요소 하나를 pop(제거하며 반환)합니다.
  • lpop(lpop [key]) : list의 왼쪽 끝에서 요소 하나를 pop합니다.
  • lindex(lindex [key] [offset]) : offset에 해당하는 요소를 반환합니다. zero-based numbring 방식을 따릅니다.
  • lrange(lrange [key] [start] [end]) : start와 end 사이의 요소들을 모두 반환합니다.
  • ltrim(ltrim [key] [start] [end]) : start와 end 사이의 요소들만 남도록 list를 잘라냅니다.

위의 명령어들을 사용한 예는 다음과 같습니다.

lindex, lrange, ltrim 등 인덱스가 들어가는 곳에 음수가 들어갈 수 있다는 것을 알고 있으면 매우 유용합니다.

'데이터베이스 > Redis' 카테고리의 다른 글

[Redis] String(기본 조작)  (0) 2018.09.06
[Redis] List의 고급 커맨드들  (0) 2018.09.06
[Redis] select  (0) 2018.09.06
[Redis] Set  (0) 2018.09.06
[Redis] Publish/Subscribe  (0) 2018.09.06

Redis는 0부터 시작하는 숫자 인덱스를 갖는, 논리적으로 독립되어 있는 데이터베이스 구조를 지원합니다. 서로 다른 인덱스의 데이터베이스를 사용하더라도, 이들은 동일한 파일에 함께 유지되므로 완전히 독립된 데이터베이스가 아니라 네임스페이스 개념이라고 생각하는 것이 좋습니다. 그러나 key에 대한 부분은 독립되기 때문에 여러 응용 프로그램에 서로 다른 Redis 데이터베이스를 사용하더라도 key 식별은 걱정하지 않아도 됩니다.

select [index]

데이터베이스 선택은 select를 사용합니다. 기본 인덱스는 0번이며, 0번이 아닌 인덱스가 select된 경우 콘솔에 함께 표시됩니다.

127.0.0.1:6379>
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]>

서로 다른 데이터베이스에서 key들은 독립되어 있습니다.

127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set a 456
OK
127.0.0.1:6379[1]> get a
"456"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get a
"123"

'데이터베이스 > Redis' 카테고리의 다른 글

[Redis] String(기본 조작)  (0) 2018.09.06
[Redis] List의 고급 커맨드들  (0) 2018.09.06
[Redis] List  (0) 2018.09.06
[Redis] Set  (0) 2018.09.06
[Redis] Publish/Subscribe  (0) 2018.09.06

+ Recent posts