개요
Redis를 개발에 적용하기 전에 어떤 명령어가 있는지 알아야지 서버에 적용 시킬수 있다.
이를 위해 기본 명령어를 정리 하였습니다.
명령어
- set key value
- 같은 key가 이미 존재 하면 덮어 씌어 진다.
- set key value nx
- 같은 키가 존재 하면 update 되지 않는다.
- set key value xx
- 같은 키가 존재 하면 update 된다.(default)
- get key
- incr key
- value가 Integer일 경우 +1 한다.
- incrby key 50
- value가 Integer일 경우 +50 한다.
- decr key
- value가 Integer일 경우 -1 한다.
- decrby key 50
- value가 Integer일 경우 -50 한다.
- mset a 10 b 20 c 30
- 여러 데이터를 insert합니다.
- mget a b c
- del key
- key 데이터 삭제
- exists key
- key가 존재 하는지 확인 (return 1/0)
- type key
키 공간 관련 명령어는 많지만 위의 두 가지는 지정된 키에 저장된 값의 종류를 반환하는 TYPE 명령어와 함께 필수 명령어입니다.
- set key 100 ex 10
- key 생성과 동시에 "ex 10"으로 10초의 만료 시간을 설정합니다.
- expire key 5
- 생성된 key의 만료 시간을 정합니다.
- ttl key
- 특정 키의 만료 시간을 확인 할수있습니다.
- rpush key value
- RPUSH는 목록의 오른쪽에 요소를 추가
- lpush key value
- LPUSH는 왼쪽에 요소를 추가
- lrange mylist 0 -1
- LRANGE는 반환할 범위의 첫 번째 요소와 마지막 요소인 두 개의 인덱스를 사용합니다.
- 두 인덱스는 모두 음수일 수 있으며 Redis에게 끝에서부터 계산을 시작하라고 지시합니다.
- 따라서 -1은 마지막 요소이고 -2는 목록의 끝에서 두 번째 요소입니다.
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
> rpush mylist 1 2 3 4 5 "foo bar"
(integer) 9
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "foo bar"
- lpop/rpop
- 리스트 lpop(왼쪽), rpop(오른쪽)으로 pop한다.(pop의미는 자료구조를 안다면 알것이라고 생가한다.)
> lrange mylist 0 -1 1) "A" 2) "B" 3) "C" > rpop mylist "C" > lpop mylist "A" > lrange mylist 0 -1 1) "B"
- ltrim key start end
- LTRIM 명령은 LRANGE와 유사하지만 지정된 요소 범위를 표시하는 대신 이 범위를 새 목록 값으로 설정합니다.
- 주어진 범위 밖의 모든 요소가 제거됩니다.
> rpush mylist 1 2 3 4 5
(integer) 5
> ltrim mylist 0 2
OK
> lrange mylist 0 -1
1) "1"
2) "2"
3) "3"
후기
여기 까지가 기본적인 Query문 인거 같다.
이후 "Blocking operations on lists"에서 부터 심도 있는 내용이 나오고 한번 정독후에 정리 해야 할거 같다.
내가 이 내용을 멈추게 된 이유는 아래와 같은 예시가 나왔는데
목록에는 큐를 구현하는 데 적합하고 일반적으로 프로세스 간 통신 시스템의 구성 요소인 차단 작업에 적합한 특수 기능이 있습니다.
하나의 프로세스로 항목을 목록에 푸시하고 해당 항목에 대해 실제로 일종의 작업을 수행하기 위해 다른 프로세스를 사용한다고 상상해 보십시오.
이것은 일반적인 생산자/소비자 설정이며 다음과 같은 간단한 방법으로 구현할 수 있습니다.목록에 항목을 푸시하기 위해 생산자는 LPUSH를 호출합니다.
목록에서 항목을 추출/처리하기 위해 소비자는 RPOP을 호출합니다.
그러나 때로는 목록이 비어 있고 처리할 것이 없기 때문에 RPOP이 NULL을 반환할 수도 있습니다.
이 경우 소비자는 잠시 기다렸다가 RPOP로 다시 시도해야 합니다.
이를 폴링이라고 하며 몇 가지 단점이 있기 때문에 이 맥락에서 좋은 생각이 아닙니다.Redis와 클라이언트가 쓸모 없는 명령을 처리하도록 강제합니다(목록이 비어 있을 때의 모든 요청은 실제 작업을 수행하지 않고 NULL만 반환함).
작업자가 NULL을 수신한 후 일정 시간 대기하므로 항목 처리에 지연을 추가합니다.
지연 시간을 줄이기 위해 RPOP에 대한 호출 간 대기 시간을 줄여 문제 번호 1, 즉 Redis에 대한 쓸모 없는 호출을 증폭시키는 효과를 낼 수 있습니다.
따라서 Redis는 목록이 비어 있는 경우 차단할 수 있는 RPOP 및 LPOP 버전인 BRPOP 및 BLPOP이라는 명령을 구현합니다.
새 요소가 목록에 추가되거나 사용자 지정 시간 초과가 발생한 경우에만 호출자에게 반환됩니다..다음은 작업자에서 사용할 수 있는 BRPOP 호출의 예입니다.
> brpop tasks 5
1) "tasks"
2) "do_something"
이는 "목록 작업의 요소를 기다리지만 5초 후에 사용 가능한 요소가 없으면 반환"을 의미합니다.
0을 시간 제한으로 사용하여 요소를 영원히 기다릴 수 있으며 동시에 여러 목록을 대기하고 첫 번째 목록이 요소를 수신할 때 알림을 받기 위해 하나가 아닌 여러 목록을 지정할 수도 있습니다.
BRPOP에 대해 유의해야 할 몇 가지 사항:
클라이언트는 순서대로 제공됩니다.
목록 대기를 차단한 첫 번째 클라이언트는 요소가 다른 클라이언트에 의해 푸시될 때 먼저 제공됩니다.
반환 값은 RPOP와 다릅니다.
BRPOP 및 BLPOP은 여러 목록의 요소를 기다리는 것을 차단할 수 있기 때문에 키 이름도 포함하므로 2개 요소 배열입니다.
제한 시간에 도달하면 NULL이 반환됩니다.
목록 및 차단 작업에 대해 알아야 할 사항이 더 있습니다. 다음에 대해 자세히 읽어 보시기 바랍니다.LMOVE를 사용하여 더 안전한 대기열 또는 순환 대기열을 구축할 수 있습니다.
BLMOVE라는 명령의 차단 변형도 있습니다.
이 부분은 테스트 후에 정리를 한번 해봐야 할거 같다.
지금까지 내용은 (Redis Document)[https://redis.io/docs/data-types/tutorial/#key-expiration] 의 절반 정도 되는 내용이고
필요하다면 먼저 문서를 읽어 보는 것이 좋다고 생각한다.
'DB' 카테고리의 다른 글
Redis 란?_ Automatic creation and removal of keys (0) | 2023.04.16 |
---|---|
Redis 란?_명령어_brpop (0) | 2023.04.16 |
Redis 란?_Key/value 규칙 (0) | 2023.04.16 |
Redis 란?_기본 정보 (0) | 2023.04.16 |
데이터베이스 트랜잭션(Transaction) 이란? (0) | 2023.04.15 |