Database/NoSQL

레디스 데이터 타입 정리!

JaeHoney 2022. 12. 29. 08:48

레디스에서는 다양한 데이터 타입(자료구조)를 지원한다.

 

각 데이터 타입의 특징과 각 타입 별로 지원하는 명령어를 알아보자.

1. String

  • 가장 기본적인 데이터 타입으로 가장 많이 사용된다.
  • 바이트 배열을 저장한다. (binary-safe)
    • 바이너리로 변환할 수 있는 모든 데이터를 저장할 수 있다.
  • 최대 크기는 512MB

주요 명령어

  • GET - 특정 키의 문자열 값을 가져온다.
  • SET - 특정 키의 문자열 값을 저장한다.
  • INCR - 특정 키의 값을 Integer로 취급하여 1 증가시킨다.
  • DECR - 특정 키의 값을 Integer로 취급하여 1 감소시킨다.

위 두개 명령어는 Atomic하기 때문에 Race-condition이 발생하지 않는다.

  • MSET - 여러 키에 대한 값을 한번에 저장한다.
  • MGET - 여러 키에 대한 값을 한번에 가져온다.

2. List

  • List 타입은 Linked-list 형태의 자료구조를 사용한다.
  • Index 접근이 느리지만, 데이터 추가/삭제가 빠름

추가로 Queue와 Stack으로서 사용할 수 있다.

  • LPUSH, RPUSH - 리스트의 왼쪽/오른쪽에 새로운 값을 추가한다.
  • LLEN - 리스트 사이즈를 반환한다.
  • LRANGE - 특정 범위의 내용을 반환한다.
  • LPOP, RPOP - 리스트의 왼쪽/오른쪽에 값을 삭제하고 반환한다.

3. Set

  • 순서가 없는 유니크한 값의 집합
  • 검색이 빠르다.
  • 개별 접근을 위한 인덱스가 존재하지 않는다.
  • 집합 연산이 가능하다.

자주 사용되는 명령어

  • SADD - Set에 데이터를 추가한다.
  • SREM - Set에 데이터를 삭제한다.
  • SCARD - Set에 저장된 아이템 개수를 반환한다.
  • SMEMBERS - Set에 저장된 아이템들을 반환한다.
  • SISMEMBER - 특정 값이 Set에 포함되어 있는 지를 반환한다.

4. Hash

  • 하나의 key 하위에 여러 개의 field-value 쌍을 저장
  • 여러 필드를 가진 객체를 저장하는 것으로 생각할 수 있다.
  • 객체를 String에 보관하는 것과 비교했을 때 특정 필드만 접근할 수 있다는 장점이 있다.
    • (여러 개의 필드를 함께 접근할 때는 활용성이 떨어진다.)

자주 사용되는 명령어

  • HGET - 특정 필드의 값을 반환한다.
  • HSET - 한개 또는 다수의 필드에 값을 저장한다.
  • HMGET - 한개 이상의 필드 값을 반환한다.
  • HINCRBY - 한개 이상의 필드 값을 반환한다.
  • HDEL - 한개 이상의 필드를 삭제한다.

5. Sorted Set

  • Set과 유사하게 순서가 없는 유니크한 값의 집합
  • 각 값은 score라는 값을 추가로 가지고 정렬되어 있음
  • 정렬된 상태이기에 빠르게 최소/최대값을 구할 수 있음
  • 순위 계산, 리더보드 구현 등에 활용

자주 사용되는 명령어

  • ZADD - 한개 또는 다수의 값을 추가 또는 업데이트한다.
  • ZRANGE - 특정 범위의 값을 반환한다. (오름차순)
  • ZRANK - 특정 값의 위치를 반환한다. (오름차순)
  • ZREVRANK - 특정 값의 위치를 반환한다. (내림차순)
  • ZREM - 한개 이상의 값을 삭제한다.

6. Bitmap

  • 비트 벡터를 사용해 N개의 Set을 공간 효율적으로 저장한다.
    • (비트 단위로 데이터를 저장하기 때문에 낭비되는 공간이 없다.)
  • 비트 연산이 가능하다.

자주 사용되는 명령어

  • GETBIT - 비트맵의 특정 오프셋에 값을 반환한다.
  • SETBIT - 비트맵의 특정 오프셋에 값을 저장한다.
  • BITCOUNT - 비트맵에서 set(1) 상태인 비트의 개수를 반환한다.
  • BITOP - 비트맵들간의 비트 연산을 수행하고 결과를 비트맵에 저장한다.

7. HyperLogLog

  • 유니트한 값의 개수를 매우 효율적으로 얻을 수 있음
  • 확률적 자료구조로서 오차가 있으며, 매우 큰 데이터를 다룰 때 사용한다.
  • 2^64개의 유니크 값을 계산이 가능하다.
  • 12KB까지 메모리를 사용하며 0.81%의 오차율을 허용한다.

자주 사용되는 명령어

  • PFADD - HyperLogLog에 값들을 추가한다.
  • PFCOUNT - HyperLogLog에 입력된 값들의 cardinality(유일값의 수)를 반환한다.
  • PFMERGE - 다수의 HyperLogLog를 병합한다.

참고