레디스 데이터타입

레디스는 인메모리 데이터베이스로 다양한 응용에 사용될 수 있습니다. 응용을 살펴보기 앞서 레디스의 특성과 지원하는 데이터타입(자료구조)을 살펴봅니다.

String

  • 하나의 문자열
  • 최대 512MB의 문자열을 저장가능
  • 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe하게 처리됨
    • JPEG, HTTP응답값 등의 다양한 데이터 저장가능
  • 숫자에 대해서는 증가,감소 연산을 원자적으로 처리가능
    • 싱글스레드이기 때문에 명령어에서 원자적으로 처기한다는 말은 여러개의 클라이언트에서 연산을 수행해도 race condition이 발생하지 않는다는것을 의미
  • 성능이 중요한(대규모 트래픽등) 응용의 경우 여러개의 데이터를 조작하는 MSET, MGET을 적절하게 사용해서 밀리세컨드 단위의 네트워크 통신 비용을 줄일수 있음

String 조작 명령어

  • SET
    • 저장
    • 동일한 키가 존재하면 새로운 값으로 대체
  • SETNX
    • 동일한 키가 없는 경우만 저장
  • GET
    • 조회
  • MSET
    • 여러개를 저장
  • MGET
    • 여러개를 조회
  • INCR
    • 값이 숫자인경우 증가
    • 없는 키 일경우 1로 저장
  • DECR
    • 감소
    • 없는 키 일경우 -1로 저장
  • INCRBY
    • 특정 값만큼 증가
    • 없는 키 일경우 특정값으로 저장
  • DECRBY
    • 특정 값만큼 감소
    • 없는 키 일경우 (-)특정값으로 저장
> SET product:1 macbook-pro
OK

> GET product:1
"macbook-pro"

> SET product:1 macbook-air
OK

> GET product:1
"macbook-air"

> SET product:1 iphone NX
(nil)

List

  • 순서를 가지는 문자열의 목록
  • Linked List로 구현됨
    • 데이터 입력, 추출은 O(1), 인덱스 기반 데이터 접근 O(n)
  • 최대 42억(2^32 - 1)여개 아이템 저장

List 조작 명령어

  • LPUSH
    • 왼쪽(head)에 데이터 추가
  • RPUSH
    • 오른쪽(tail)에 데이터 추가
  • LPOP
  • LINSERT
    • BEFORE
    • AFTER
  • LINDEX
  • LSET
  • PPOP
  • LLEN
  • LMOVE
  • LRANGE
  • LTRIM
  • BLPOP
  • BLMOVE

Set

  • 정렬되지 않은 중복을 허용하지 않는 문자열 모음

Set 조작 명령어

  • SADD
  • SMEMBERS
  • SREM
  • SPOP
  • SUNION
  • SINTER
  • SDIFF

Sorted Set

  • score값에 따라 정렬되는 중복을 허용하지 않는 문자열 모음
    • 즉 데이터는 <score, 문자열> 쌍을 가짐
    • 문자열은 중복될 수 없음
    • 같은 스코어는 문자열의 사전순으로 저장
  • 인덱스를 사용해 아이템에 접근할 일이 많다면 list 보다 sorted set효율적임
    • log(n)

Sorted Set 조작 명령어

  • ZADD
    • 스코어 변경해서 입력하면 스코어가 업데이트
    • 옵션
      • XX: 아이템이 이미 존재할때만 스코어 업데이트
      • NX: 아이템이 존재하지 않을때만 신규삽입, 기존 아이템의 스코어를 업데이트하지 않음
      • LT: 업데이트하고자하는 스코어가 기존 스코어보다 작을때만 업데이트, 없으면 신규 삽입
      • GT: 업데이트하고자하는 스코어가 기존 스코어보다 클때만 업데이트, 없으면 신규 삽입
  • ZRANGE
    • 옵션
      • BYSCORE: 스코어(이상, 이하)로 조회, (는 포함하지 않는 조회
      • BYLEX: 문자열을 조건으로 조회
        • ZRANGE mySortedSet (b (f BYLEX
      • WITHSCORES
  • ZINCREBY
    • 스코어값을 증가
  • ZUNIONSCORE
    • 스코어값의 합한 새로운 sorted-set을 생성
    • 옵션
      • weight: 스코어에 대한 가중치 지정

Hash

  • 하나의 키 내에서 필드-값 저장
  • 해시내에서 필드는 중복을 허용하지 않음
  • 필드와 값 모두 문자열로 저장
  • 해시는 객체를 표현하기 적절한 자료구조

Hash 조작 명령어

  • HSET
  • HGET
  • HMGET
  • HGETALL

Stream

  • 레디스를 메시지 브로커로 사용할 수 있게 하는 자료구조
  • 전체적인 구조는 카프카에서 영향을 받아 만들어졌음
  • append-only
  • 실시간 이벤트 또는 로그성 데이터 저장을 위해 사용할 수 있음

Geospatial

  • 경도, 위도 데이터 쌍의 집합
  • 내부적으로 sorted set으로 저장
    • 하나의 geospatial내 키값은 중복될 수 없음

Geospatial 조작 명령어

  • GEOADD
  • GEOPOS
  • GEODIST
  • GEOSEARCH

Bitmap

  • 문자열에 비트연산을 수행할 수 있도록 확장한 자료구조
  • 2^32 비트를 가지고 있는 비트맵 형태라고 볼 수 있음
  • 저장공간을 획기적으로 줄일 수 있다는 장점이 있음
    • 유저가 정수형태의 ID로 구분되고, 전체 유저가 40억건이 넘는다 해도 유저의 y/n 데이터는 512MB 안에서 저장 가능

Bitmap 조작 명령어

  • SETBIT
  • BITFIELD
  • BITCOUNT

Hyperloglog

  • 집합의 원소 개수인 카디널리티를 추정할 수 있는 자료구조
  • 대량데이터에서 중복되지 않는 고유한 값을 집계할때 유용하게 사용할 수 있음
  • set같은 경우 중복 데이터를 피하기 위해 저장된 데이터 모두를 기억하고 있음
    • 데이터가 많아질수록 많은 메모리 사용
  • hyperloglog는 입력되는 데이터 그 자체를 저장하지 않고 자체적인 방법으로 데이터를 변경해서 처리
    • 이때문에 데이터 개수에 구애받지 않고 계속 일정한 메모리를 유지할 수 있음
  • 최대 12KB
  • 카디널리티 추정 오차는 0.81%
  • 하나의 hyperloglog에는 최대 2^64개의 아이템 저장가능

Hyperloglog 조작 명령어

  • PFADD
  • PFCOUNT

References