레디스 데이터타입
레디스는 인메모리 데이터베이스로 다양한 응용에 사용될 수 있습니다. 응용을 살펴보기 앞서 레디스의 특성과 지원하는 데이터타입(자료구조)을 살펴봅니다.
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
- BYSCORE: 스코어(이상, 이하)로 조회,
- 옵션
- 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