DB

Redis 란?_명령어_기초

Raconer 2023. 4. 16. 23:38
728x90

개요

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] 의 절반 정도 되는 내용이고
필요하다면 먼저 문서를 읽어 보는 것이 좋다고 생각한다.

728x90

'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