소프트웨어 개발

[Redis] 레디스의 주요 명령어에 대해 간단히 알아보자

hyunjuuun.dev 2024. 2. 18. 07:00

 

이번 글에서는 아래 내용에 대해 알아볼 것이다.

  • 레디스의 유용한 명령어
  • Key와 관련된 주요 명령어
  • 레디스 value의 데이터 타입과 주요 명령어 

 

유용한 명령어

redis-cli monitor

  • 레디스로 요청되는 모든 명령어들을 출력해 준다.
  • 로컬 개발 환경에서 개발 작업을 할 때 의도대로 동작하는지 확인할 때 유용하다.

 

slowlog get

  • 명령 처리 과정에서 시간이 오래 걸린 결과들을 확인
  • 기본적으로 처리 시간이 10ms 이상인 결과들을 기록
  • format
    1. ID
    2. 실행시간
    3. 수행시간 (microsecond)
    4. 명령
    5. client ip/port
    6. client name

info

  • 버전, 시스템 정보, 클라이언트 연결 개수, 메모리 정보 등 다양한 정보 확인

SELECT

  • 물리적인 데이터베이스 설정 (기본적으로 0번 데이터베이스 사용)

 

Key와 관련된 주요 명령어

TTL (Time To Live)

  • EXPIRE [KEY] [SECOND]
    • 모든 key의 삭제 시간을 설정할 수 있다.
  • TTL [KEY]
    • 남은 시간을 확인할 수 있다.

DEL command (sync)

  • DEL [KEY]
    • 동기적으로 key 삭제
      • 여기서 동기적이라는 것은 데이터를 모두 삭제한 뒤 응답이 오는 것을 의미한다.

UNLINK command (sync)

  • UNLINK [KEY]
    • DEL과 달리 비동기적으로 삭제가 진행된다.

비동기적인 삭제가 왜 필요할까?

  • 레디스는 다양한 데이터 타입을 지원하고 동기적으로 삭제하기에는 오랜 시간이 소요되는 데이터도 존재할 것이다. 응답 지연을 줄이고 서비스 안정성을 올리는 측면에서 UNLINK 명령어를 사용한다.

MEMORY USAGE command

  • MEMORY USAGE [KEY]
    • 해당 key의 데이터 크기를 확인할 수 있다.

 

레디스 value의 데이터 타입

레디스 value의 데이터 타입은 아래와 같다.

  • Strings
  • Lists
  • Sets
  • Sorted sets
  • Hashes
  • Geospatial
  • Bitmap

순차적으로 간단히 알아보자.

Strings

  • 바이너리, 문자 데이터 저장
    • max 512MB
  • 증가 감소에 대한 원자적 연산
    • increment/decrement

백엔드에서는 주로 json 형식의 텍스트 데이터를 저장한다.

애플리케이션에서 객체를 직렬화한 데이터도 저장한다.

command

  • SET
  • SETNX (if not exist)
    • 값이 없는 경우에만 저장
    • SET으로 대체 가능
  • GET
  • MGET (multiple get)
  • INCR
  • DECR

 

MGET 명령어를 이용하면 여러 value들이 필요한 상황에서 데이터를 한 번에 불러올 수 있다. GET 명령어보다 성능의 이점이 있음으로 잘 알아두자

 

SET 명령어가 있는데 INCR, DECR 명령어는 왜 존재할까?

애플리케이션에서 동시에 key는 counter value는 0인 값을 증가시키려 한다고 해보자. GET 명령어를 실행했을 때 모두 0으로 조회하고 1을 증가시켜 SET 1 명령어를 각각 실행하게 되면 의도와 다르게 결괏값이 1이 될 것이다. 

 

Lists

String에 대한 Linked List 자료 구조이다.

주로 스택이나 큐를 구현할 때 사용된다.

command

  • LPUSH
  • RPUSH
  • LPOP
  • RPOP
  • LLEN
    • 리스트의 길이 확인
  • LRANGE
    • 인덱스를 통한 조회
    • ex. lrange players 0 1

 

-1을 이용하면 전체 리스트 조회 가능

 

레디스를 통한 큐 활용

LPOP, RPUSH 사용

 

레디스를 통한 스택 활용

RPOP, RPUSH 사용

 

Sets

Unordered Collection (unique strings)

ex)

  • SNS follow
  • Blacklist
  • Tags

command

  • SADD
    • Set add
  • SREM
    • Set remove
  • SISMEMBER
    • 특정 값이 Set에 포함되어 있는지 확인
  • SMEMBERS
    • Set의 전체 데이터 조회
  • SINTER
    • 2개 이상의 Set에서 공통된 데이터 조회
  • SCARD
    • Cardinality
    • Set에 포함된 데이터 개수 조회

 

Sorted Sets

유니크한 값을 보장하면서 특정 점수 기반으로 정렬

ex)

  • 점수 기반의 순위를 제공하는 리더보드
  • 특정 시간 동안 요청이 일정 값 이상이면 요청을 차단해 주는 Rate limit

command

  • ZADD
  • ZREM
  • ZRANGE
    • 집합의 요소 조회
    • 6.2 버전부터 REV, BYSCORE, BYLEX and LIMIT option 제공
  • ZCARD
  • ZRANK / ZREVRANK
    • 요청한 값의 순위 조회
  • ZINCRBY

Hashes

field-value pair collections (Java HashMap)

command

  • HSET
  • HGET, HMGET
  • HGETALL
  • HDEL
  • HINCRBY 

 

Geospatial

위도, 경도 정보를 저장할 수 있는 데이터 타입

command

  • GEOADD
  • GEOSEARCH (6.2)
  • GEODIST
  • GEOPOS

 

BitMap

0 또는 1의 값으로 이루어진 비트열

메모리를 적게 사용하여 대량의 데이터 저장에 유용함

command

  • SETBIT
  • GETBIT
  • BITCOUN