참고자료
Redis
- 인메모리 저장소 + 물리 장치 백업 지원
- 메시지 브로커 기능 보유 : Pub/Sub
- BSD 라이선스
redis-server/redis-cli
- 서버 실행
- 서버 접속
- help
- 여러 키 삭제
- 키 공간 이벤트 구독 가능
↓ shell
↓ shell
↓ redis-cli
↓ shell
키 공간 이벤트는 기본적으로 발행되지 않으므로, 서버 설정을 변경해야 한다.참고 자료
Data type
- Binary-safe string : 임의 이진 문자열(최대 512MB)
- List : 기본적으로 삽입 순으로 유지되는 string 연결 리스트(최대 길이 2^32 - 1)
- Set : 순서 없는 string 집합(최대 크기 2^32 - 1)
- Sorted set : 각 string 원소는 score라 불리는 실수 가중치(정렬키)를 가짐
- Hash : field -> value 매핑(최대 크기 2^32 - 1). 각 field, value는 모두 string
- Bit array : string을 비트열로 다룰 수 있다
- HyperLogLog : 집합 크기 추정에 이용되는 확률 자료형
- Stream : append만 가능한 유사 hash
- stream entry는 1개 이상의 field-value 쌍으로 구성된다
- stream entry의 선후 관계는 ID로 구분한다. ID가 이전보다 작으면 추가 실패. ID를 *로 지정하는 경우, 서버에서 자동으로 millisecondsTime-sequenceNumber로 할당
- 현재 시각이 이전 entry의 시각보다 작은 경우, 이전 entry의 시각을 사용하고 sequenceNumber만 증가한다
- 123-* 처럼 sequenceNumber만 자동 할당할 수도 있다
- 3가지 방식으로 entry를 획득할 수 있다
- ID 범위를 이용해 질의 :XRANGEXREVRANGE
- 새로 도착하는 entry 질의 :XREADXREADGROUP
- 블로킹 list 연산과 달리, 새로 도착한 entry는 기본적으로 모든 대기 중인 클라이언트에 전달된다
- 발송 후 즉시 삭제하는 Pub/Sub 서비스와 달리, entry는 명시적인 삭제 요청이 없는 한 영구적으로 스트림에 남는다
- 소비자 그룹을 이용해 그룹 내 소비자들이 서로 다른 entry를 독립적으로 처리할 수 있다
블로킹 vs 논-블로킹 = 처리(예. 삭제) 후 반환 vs 반환 후 처리
같은 score 사이에서는 value를 기준으로 정렬된다
Commands
참고 자료 : commands. Redis 명령어들은 연관성에 따라 하나의 그룹에 속해있다
주의사항
- MGET, MSET과 같은 다중 키 작업 명령은, 모든 키가 동일한 해시 슬롯에 있지 않으면 CROSSSLOT 오류 발생
- 키를 동일한 해시 슬롯에 배치하기 위해 태그 사용
예를 들어 키 {profile}:123와 {profile}:124는 동일한 슬롯에 할당된다
- 각 키를 개별 명령으로 보내되, 파이프라인을 이용
- 키를 동일한 해시 슬롯에 배치하기 위해 태그 사용
Generic
COPY since 6.2.0
↓ syntax
- source 키의 값을 destination 키로 복사
- 복사됐으면 1, 아니면 0 반환
- DB : 내부 논리적 DB index
- REPLACE : 덮어쓰기
DEL
↓ syntax
키를 삭제하고, 삭제된 개수 반환
DUMP
↓ syntax
- 값을 Redis 포맷(내부 RDB 버전에 따라 인코딩 방식 결정됨)으로 직렬화하여 반환
- RESTORE로 역직렬화 가능
expire time은 포함되지 않음
↓ redis-cli
EXISTS
↓ syntax
존재하는 키의 개수 반환. 중복된 키는 중복 카운트 됨에 유의
EXPIRE
↓ syntax
- 지정 시간(초) 후 키 삭제
- 설정됐으면 1, 아니면 0반환
- 값을 덮어쓰지 않는 명령(INCR, LPUSH, HSET)과 RENAME은 ttl 정보에 영향을 미치지 않음에 유의
- NX : No expiry; 키에 ttl이 설정되지 않은 경우에만 설정
- XX : Exists expiry; 키에 ttl이 설정된 경우에만 설정
- GT : Greater than; 기존 ttl보다 큰 경우에만 설정
- LT : Less than; 기존 ttl보다 작은 경우에만 설정
- ttl이 없는 경우 GT, LT에서 무한으로 간주
PEXPIRE
↓ syntax
밀리초 단위 EXPIRE
EXPIREAT
↓ syntax
- 지정 시각 이후 키 삭제
- 설정됐으면 1, 아니면 0반환
- 값을 덮어쓰지 않는 명령(INCR, LPUSH, HSET)과 RENAME은 ttl 정보에 영향을 미치지 않음에 유의
- NX : No expiry; 키에 ttl이 설정되지 않은 경우에만 설정
- XX : Exists expiry; 키에 ttl이 설정된 경우에만 설정
- GT : Greater than; 기존 ttl보다 큰 경우에만 설정
- LT : Less than; 기존 ttl보다 작은 경우에만 설정
- ttl이 없는 경우 GT, LT에서 무한으로 간주
PEXPIREAT
↓ syntax
밀리초 단위 EXPIREAT
EXPIRETIME Since 7.0.0
↓ syntax
- 키가 만료되는 시각 - Unix timestamp in seconds을 반환한다
- -1 : ttl 설정 안 된 경우
- -2 : 키가 존재하지 않는 경우
PEXPIRETIME Since 7.0.0
↓ syntax
밀리초 단위 EXPIRETIME
KEYS
↓ syntax
- GLOB style pattern에 일치하는 키 배열 반환
- KEYS 명령은 사용중인 저장소가 클수록 큰 성능 저하를 발생하므로 각별히 주의
MIGRATE
↓ syntax
- 데이터를 다른 서버로 옮긴다. DUMP + DEL + RESTORE의 조합
- timeout-ms : MIGRATE 명령이 제한시간 안에 수행함을 의미하는 것이 아니라, 어느 단계에서든 해당 지연 시간 이상 블록되는 일이 없음을 보장
- COPY : 원본을 지우지 않는다
- KEYS : 여러 개를 이동할 때, 앞부분 key를 ""로 하고 사용
- AUTH, AUTH2 모두 목적지 서버 연결 정보로써, 필요한 것 하나만 사용
시간초과가 발생하더라도 목적지에 복사된 상태일 수 있음에 유의. 반면 그 외의 에러 상황에서는 목적지에 복사되지 않은 상태임을 보장
MOVE
↓ syntax
- 키를 다른 DB로 옮긴다. 이미 목적지에 key가 존재하면 옮기지 않는다 -- 이 성질을 이용하여 락을 구현할 수도 있다
- 옮겼으면 1, 그 외엔 0 반환
OBJECT
↓ syntax
- 키에 대한 정보 획득
- OBJECT ENCODING key : 상세 데이터 타입 반환
- OBJECT FREQ key : 참조 빈도 반환. 메모리 정책에 따라 추적 여부가 결정됨
- OBJECT IDLETIME key : 참조하지 않은 시간(초) 반환
- OBJECT REFCOUNT key : 키가 참조하는 값의 개수 반환
PERSIST
↓ syntax
- ttl 삭제
- 삭제했으면 1, 아니면 0 반환
RANDOMKEY
↓ syntax
현재 DB에서 임의 키 반환. 없으면 nil
RENAME
↓ syntax
- key가 존재하지 않는 경우 에러 반환
- 기존 newkey는 덮어씌어진다(암시적 DEL 수행)
- 기존 ttl 정보는 그대로 옮겨진다
- 클러스터 모드에서, key와 newkey는 같은 해시 슬롯에 존재해야
- 성공 시 "OK" 반환
RENAMENX
↓ syntax
- newkey가 존재하지 않는 경우만 RENAME
- 성공했으면 1, 아니면 0 반환
RESTORE
↓ syntax
- Redis 포맷 문자열로부터 역직렬화
- ttl : 0이면 무기한
- ABSTTL : 설정한 경우, ttl을 Unix timestamp로 해석한다
- IDLETIME, FREQ : OBJECT 명령과 관계된 초기값 설정
SCAN
↓ syntax
- cursor가 가리키는 지점부터 약 count개의 키 중, GLOB style pattern에 일치하는 목록을 반환한다
- COUNT : 유저가 원하는 페이지 크기에 대한 힌트로 사용된다(기본값 10) -- 반드시 count 개가 반환되는 것이 아님. 또, 연속 순회 시 count는 자유롭게 변경해도 된다
- cursor : 0을 지정하여 순회 시작. 응답 첫 번째 원소로 0이 아닌 cursor가 반환되고, 이를 이용해 나머지를 순회할 수 있다
- MATCH : 패턴 매칭은 페이지가 구성된 후 클라이언트에 응답하기 직전에 수행되므로, 순회가 종료되지 않더라도 키 목록이 비어있을 수 있다
- TYPE : 값이 type에 해당하는 키만 검색.TYPE
- 서버는 순회와 관련하여 상태를 저장하지 않으므로, 동시 순회 클라이언트 개수에 제한이 없고, 중간에 언제든 순회를 그만둬도 된다
- 순회의 종료를 판단하는 기준 : 지정 cursor로부터 남은 키의 개수가 count보다 작은가?
- 일부 복합 타입들은 특정 크기를 초과하지 않는 한 해시 테이블이 아닌 하나의 값으로 저장되므로, count보다 많은 목록이 응답될 수도 있다
↓ redis-cli
SORT
↓ syntax
- list, set, sorted set 데이터를 정렬하여 획득 or 저장한다
- 기본적으로 값의 두배 정밀도 실수 표현을 정렬 키로 한다
- ALPHA : 문자열 정렬을 수행하고 싶은 경우
- offset : 0부터 시작
- BY pattern : 정렬 키 지정
- GET # : 원소 자체도 반환
- GET pattern : 조회 키 지정
- 해시 필드에 대하여, 아래와 같이 -> 표기를 이용해 BY, GET 옵션을 사용할 수 있다
↓ redis-cli
↓ 예.
SORT_RO Since 7.0.0
↓ syntax
읽기 전용 SORT : SORT 명령은 STORE 옵션으로 인해 쓰기 명령으로 분류되고, 이로 인해 읽기 전용 복제본에서 마스터 인스턴스로 명령이 항상 리디렉션되었는데, 이를 방지할 목적으로 추가되었다.
TOUCH
↓ syntax
- 마지막 접근 시각을 현재로 설정
- 설정한 개수 반환
TTL
↓ syntax
남은 유효 시간(초) 반환. 삭제됐으면 -2, ttl 없으면 -1
PTTL
↓ syntax
밀리초 단위 TTL
TYPE
↓ syntax
데이터 타입 반환; string, list, set, zset, hash, stream, none
UNLINK
↓ syntax
- 키 공간에서 키를 삭제한 개수를 반환
- DEL과 다르게 메모리 해제를 별도 스레드에서 진행(논-블로킹)하기 때문에, 지울 개수가 많을수록 UNLINK가 더 빠르다
WAIT
↓ syntax
- 이전 모든 write 명령이 numreplicas개의 복제본에 도달하기까지 최대 timeout 밀리초 대기
- 도달한 복제본 개수 반환
- timeout == 0이면 무기한 대기 가능
String
APPEND
↓ syntax
- 키가 존재하고 값이 문자열이면 append
- 키가 존재하고 값이 문자열이 아니면 에러
- 키가 없으면 set
- 연산 후의 문자열 길이 반환
DECR
↓ syntax
- 주어진 키의 정수 1 감소 후 반환
- 값이 signed 64bit 범위 밖이면 에러
키가 없으면 0으로 간주
DECRBY
↓ syntax
- 주어진 키의 정수 decrement 감소 후 반환
- 값이 signed 64bit 범위 밖이면 에러
키가 없으면 0으로 간주
GET
↓ syntax
- key가 없으면 nil 반환
- key의 값이 문자열이면 해당 값 반환
- 그 외는 에러
GETDEL
↓ syntax
- GET 실행 후 DEL(key가 존재하고, 값이 string일 경우) 실행
- GET 실행 결과 반환
GETEX
↓ syntax
- GET 실행 후 ttl 변경. GET 실행 결과 반환
- EX, PX : ttl(상대 시간)
- EXAT, PXAT : ttl(절대 시각)
- PERSIST : ttl 제거
GETRANGE
↓ syntax
- key에 대하여, 문자열의 부분 문자열 [start, end] 반환
- 음수 인덱스 가능. 문자열 길이를 초과하는 구간은 무시
GETSET; Deprecated since 6.2.0
↓ syntax
- SET 실행 후, 이전 값 반환
- Since 6.2.0 : SET 명령의 GET 옵션 사용
INCR
↓ syntax
- 주어진 키의 정수 1 증가 후 반환
- 값이 signed 64bit 범위 밖이면 에러
키가 없으면 0으로 간주
INCRBY
↓ syntax
- 주어진 키의 정수 increment 증가 후 반환
- 값이 signed 64bit 범위 밖이면 에러
키가 없으면 0으로 간주
INCRBYFLOAT
↓ syntax
- 주어진 키의 실수 increment(음수 가능) 증가 후 반환
- 값이 double 범위 밖이면 에러
키가 없으면 0으로 간주
LCS Since 6.0.0 or 7.0.0
↓ syntax
- 두 문자열의 LCS(Longest common subsequence)를 구한다
- LEN : 길이만을 원하는 경우
- IDX : LCS 각 부분 시퀀스의 [시작, 종료] 위치를 역순으로 반환
- IDX MINMATCHLEN : LCS 부분 시퀀스 중, 최소 길이를 만족하는 것만 반환
- IDX WITHMATCHLEN : LCS 각 부분 시퀀스의 길이도 반환
↓ redis-cli
↓ redis-cli
MGET
↓ syntax
각 키에 대해 get 하여 배열로 반환
↓ redis-cli
MSET
↓ syntax
원자적으로 주어진 키-값 쌍들을 모두 설정한다
MSETNX
↓ syntax
모든 키가 신규인 경우 mset 실행하고 1 반환. 그 외엔 0 반환
PSETEX
↓ syntax
밀리초 단위SETEX
SET
↓ syntax
- 원자적으로 key에 대하여 value를 할당한다. 이전에 설정한 값, 유효 기간을 덮어쓴다
- EX, PX : ttl(상대 시각)
- EXAT, PXAT : ttl(절대 시각)
- NX : 신규 키일 때만 설정
- XX : 중복 키일 때만 설정
- KEEPTTL : 이전 ttl 유지
- GET : 이전 값 반환(없으면 nil)
SETEX
↓ syntax
"SET key value EX seconds"와 동일
SETNX
↓ syntax
- key가 존재하지 않을 경우에만 value 설정
- 설정했으면 1, 아니면 0 반환
SETRANGE
↓ syntax
- key에 대하여, offset(0부터 시작) 위치부터 value의 길이만큼 value로 덮어쓴다
- offset이 기존 문자열을 초과하는 경우 빈 자리는 \x00으로 채워진다
- key가 존재하지 않는 경우, 값을 빈 문자열로 간주하고 실행한다
- 설정 후 문자열 길이를 반환한다
- GETRANGE와 함께 O(1) 접근 가능한 공유 배열로 이용할 수 있다
↓ redis-cli
STRLEN
↓ syntax
- 문자열 길이 반환
- key가 존재하지 않으면 0
- 값이 문자열이 아니면 에러
Bitmap
BITCOUNT
↓ syntax
- 문자열 내 set bit 개수 반환
- start, end : 음수를 허용하는 두 인덱스로 표현되는 닫힌 구간 [start, end]으로 탐색 구간 지정 가능
- BYTE, BIT : 탐색 구간에 사용되는 start, end의 단위 지정
BITFIELD
↓ syntax
- 문자열을 비트열로 간주하여 GET, SET, INCRBY 연산들을 수행한다
- encoding : 부호 있는 64비트, 부호 없는 63비트까지 가능
- offset : 0부터 시작하는 시작 위치. 정수만 이용하는 경우 bit단위, #를 붙이면 encoding 크기 단위
- OVERFLOW : WRAP(default, 오버/언더플로우 비트 무시), SAT(오버/언더플로우 시 최대/최소값으로), FAIL(실패, nil 반환)
- 반환 : SET(이전 값), GET(현재 값), INCRBY(신규 값)
GET 서브 명령 실행 시, 문자열을 벗어난 구간의 비트열은 0으로 간주한다
예. i5(부호 있는 5비트), u4(부호 없는 4비트)
OVERFLOW 이후 등장하는 INCRBY 서브 명령에만 영향을 미침에 유의
↓ redis-cli
BITFIELD_RO Since 6.2.0
↓ syntax
읽기 전용 복제본에서 마스터로 명령이 리디렉션되는 것을 방지하기 위한 읽기 전용 BITFIELD
BITOP
↓ syntax
소스 키들의 값에 대한 AND, OR, XOR, NOT 결과를 destkey에 저장한다
↓ redis-cli
BITPOS
↓ syntax
- bit와 일치하는 인덱스를 닫힌 구간 [start, end] 사이(음수 인덱스 가능)에서 구한다
- BYTE, BIT : 탐색 구간에 사용되는 start, end의 단위 지정
- Set bit을 못찾은 경우 -1 반환
- 구간 지정 없이 Clear bit을 못찾은 경우 비트열 길이 반환
- 구간 지정했지만 Clear bit을 못찾은 경우 -1 반환
문자열을 초과하는 부분을 0 비트열로 간주하기 때문
↓ redis-cli
GETBIT
↓ syntax
offset(0부터 시작)번째 비트 반환. 문자열을 넘어선 구간은 0으로 간주
SETBIT
↓ syntax
offset(0부터 시작)번째 비트를 value(0 | 1)로 변경. 이전 비트값 반환
List
BLMOVE Since 6.2.0
↓ syntax
- LMOVE Since 6.2.0의 블로킹 버전
- source 리스트가 비어있는 경우, 최대 timeout만큼 대기한다
timeout == 0이면 무기한 대기 가능
BLMPOP Since 7.0.0
↓ syntax
- LMPOP Since 7.0.0의 블로킹 버전
- 모든 리스트가 비어있는 경우, 최대 timeout만큼 대기한다
timeout == 0이면 무기한 대기 가능
BLPOP
↓ syntax
- LPOP의 블로킹 버전
- 모든 리스트가 비어있는 경우, 최대 timeout만큼 대기
- BLPOP 경합 시 처리 우선순위에 대해서는 공식 문서 참고 :blpop
지정한 리스트들을 순회하여, 최초로 비어있지 않은 리스트의 왼쪽 값 삭제 후 반환
timeout == 0이면 무기한 대기 가능
BRPOP
↓ syntax
BRPOPLPUSH; Deprecated since 6.2.0
↓ syntax
- RPOPLPUSH; Deprecated since 6.2.0의 블로킹 버전
- source 리스트가 비어있는 경우, 최대 timeout만큼 대기한다
- Since 6.2.0 :BLMOVE Since 6.2.0
timeout == 0이면 무기한 대기 가능
LINDEX
↓ syntax
index(음수 가능) 번째 값 반환
LINSERT
↓ syntax
- pivot 전|후에 element를 삽입
- 삽입 후 리스트 크기 반환. key가 존재하지 않는 경우 0. pivot을 찾지 못한 경우 -1
LLEN
↓ syntax
리스트 크기 반환. key가 존재하지 않는 경우 0
LMOVE Since 6.2.0
↓ syntax
원자적으로 source의 LEFT|RIGHT 원소를 반환한 다음 삭제하고, destination의 LEFT|RIGHT에 추가한다
↓ redis-cli
LMPOP Since 7.0.0
↓ syntax
비어있지 않은 최초 리스트의 왼쪽|오른쪽에서 최대 count개 원소를 반환하고 제거
LPOP
↓ syntax
리스트 왼쪽 값 count(기본 1)개 삭제 후 반환
LPOS Since 6.0.6
↓ syntax
- 리스트에서 element의 위치 반환. 없으면 nil
- RANK : rank번째(1부터 시작)로 찾은 위치 반환
- COUNT : 최대 num-matches개의 위치 반환
- 탐색 순서를 반대로 하고 싶다면 rank -1 지정
- num-matches가 0이면 구간 전체 탐색
- 하나도 못 찾은 경우, nil이 아니라 빈 배열 반환
- MAXLEN : 최대 len개의 원소만 비교
rank로 음수도 가능하며, '-'는 탐색 순서가 반대(tail to head)임을 지시한다
LPUSH
↓ syntax
왼쪽에 값 추가. 이후 리스트 크기 반환
LPUSHX
↓ syntax
리스트가 존재하면 왼쪽에 값 추가. 이후 리스트 크기 반환
LRANGE
↓ syntax
[start, stop] 구간의 값 반환(음수 인덱스 가능)
LREM
↓ syntax
- element를 count개 삭제, count == 0이면 전부 삭제, count < 0이면 오른쪽부터 삭제
- 삭제한 개수 반환
LSET
↓ syntax
index(음수 가능) 번째 값을 element로 교체
LTRIM
↓ syntax
[start, stop] 구간(음수 인덱스 가능)만 남기고 나머지 삭제
RPOP
↓ syntax
리스트 오른쪽 값 count개(기본 1) 삭제 후 반환
RPOPLPUSH; Deprecated since 6.2.0
↓ syntax
- 원자적으로 rpop + lpush 실행
- Since 6.2.0 :LMOVE Since 6.2.0
RPUSH
↓ syntax
오른쪽에 값 추가. 이후 리스트 크기 반환
RPUSHX
↓ syntax
리스트가 존재하면 오른쪽에 값 추가. 이후 리스트 크기 반환
Set
SADD
↓ syntax
집합에 원소 추가. 실제 추가된 개수 반환
SCARD
↓ syntax
집합 크기 반환
SDIFF
↓ syntax
차집합 반환; SDIFF s1 s2 s3 ... == s1 - s2 - s3 - ...
SDIFFSTORE
↓ syntax
SDIFF결과 destination에 저장(덮어쓰기)
SINTER
↓ syntax
교집합 반환
SINTERCARD Since 7.0.0
↓ syntax
SINTER의 크기 반환
SINTERSTORE
↓ syntax
SINTER결과 destination에 저장(덮어쓰기)
SISMEMBER
↓ syntax
집합에 포함되면 1, 아니면 0
SMEMBERS
↓ syntax
전체 원소 반환
SMISMEMBER Since 6.2.0
↓ syntax
각 원소에 대하여SISMEMBER를 실행한 결과 배열 반환
SMOVE
↓ syntax
member가 source에 포함된다면 destination으로 이동하고 1 반환. 아니면 0
SPOP
↓ syntax
무작위로 count(기본 1)개 삭제 후 반환
SRANDMEMBER
↓ syntax
무작위로 count(기본 1)개 원소 반환. 음수를 지정한 경우, 중복이 허용된다
SREM
↓ syntax
집합에서 원소 삭제. 실제 제거된 개수 반환
SSCAN
↓ syntax
집합에 대한SCAN
SUNION
↓ syntax
합집합 반환
SUNIONSTORE
↓ syntax
SUNION결과 destination에 저장(덮어쓰기)
Sorted Set
BZMPOP Since 7.0.0
↓ syntax
- ZMPOP Since 7.0.0의 블로킹 버전
- 모든 sorted set이 비어있는 경우, 최대 timeout만큼 대기
timeout == 0이면 무기한 대기 가능
BZPOPMAX
↓ syntax
- ZPOPMAX의 블로킹 버전
- 비어있지 않은 최초의 sorted set에서 가장 높은 score를 가진 원소 반환
- 모든 sorted set이 비어있는 경우, 최대 timeout만큼 대기
- 경합 시 처리 우선순위에 대해서는 BLPOP 문서 참고 :blpop
timeout == 0이면 무기한 대기 가능
BZPOPMIN
↓ syntax
- ZPOPMIN의 블로킹 버전
- 비어있지 않은 최초의 sorted set에서 가장 낮은 score를 가진 원소 반환
- 모든 sorted set이 비어있는 경우, 최대 timeout만큼 대기
- 경합 시 처리 우선순위에 대해서는 BLPOP 문서 참고 :blpop
timeout == 0이면 무기한 대기 가능
ZADD
↓ syntax
- 기본 동작 : 원소가 이미 존재하는 경우, 지정된 score로 새로 삽입한다. 새로 추가된 원소의 개수를 반환한다
- NX : 원소가 이미 존재하는 경우 스킵
- XX : 원소가 존재하지 않는 경우 스킵
- LT : 기존 score <= 새 score인 경우 스킵
- GT : 기존 score >= 새 score인 경우 스킵
- CH : score가 갱신된 원소 개수를 포함하여 반환한다
- INCR : score를 덮어쓰지 않고, 값만큼 증가
score로 -inf, +inf 가능
갱신된 score를 반환한다. 없으면 nil
ZCARD
↓ syntax
집합 크기 반환
ZCOUNT
↓ syntax
score 구간에 포함되는 원소 개수 반환
ZDIFF Since 6.2.0
↓ syntax
- 차집합 반환; ZDIFF 3 s1 s2 s3 == s1 - s2 - s3
- WITHSCORES : 반환 배열의 각 원소 뒤에 score가 포함된다
ZDIFFSTORE Since 6.2.0
↓ syntax
- ZDIFF Since 6.2.0결과를 destination에 저장한다(덮어쓰기)
- 결과 집합 크기를 반환한다
ZINCRBY
↓ syntax
- score를 increment만큼 증가한 뒤 반환
- 원소가 존재하지 않는 경우, increment를 score로 하여 원소 추가
- 키가 존재하지 않는 경우, 새 sorted set 생성
ZINTER Since 6.2.0
↓ syntax
- 교집합 반환
- WEIGHTS : 각 집합 score 가중치(기본 1)
- AGGREGATE : score 집계 함수(기본 SUM)
- WITHSCORES : 반환 배열의 각 원소 뒤에 score가 포함된다
ZINTERCARD Since 7.0.0
↓ syntax
- ZINTER Since 6.2.0결과 집합 크기를 반환한다
- LIMIT : 결과 집합 크기가 limit(기본 0; 무제한)에 도달하면 더 계산하지 않음
ZINTERSTORE
↓ syntax
- ZINTER Since 6.2.0결과를 destination에 저장한다(덮어쓰기)
- 결과 집합 크기를 반환한다
ZLEXCOUNT
↓ syntax
사전적 구간 안에 있는 원소 개수 반환
ZMPOP Since 7.0.0
↓ syntax
- 주어진 key 중 처음으로 비어있지 않은 sorted set으로부터 최대 count(기본 1)개의 원소를 제거하고, score와 함께 반환한다
- MIN|MAX : score 낮은|높은 순으로 제거
ZMSCORE Since 6.2.0
↓ syntax
각 원소에 대해ZSCORE실행한 결과 배열 반환
ZPOPMAX
↓ syntax
score가 큰 원소부터 제거하여 score와 함께 반환
ZPOPMIN
↓ syntax
score가 작은 원소부터 제거하여 score와 함께 반환
ZRANDMEMBER Since 6.2.0
↓ syntax
- 임의 원소 count(기본 1)개 반환
- count가 음수인 경우, 중복이 허용된다
- WITHSCORES : score가 함께 반환된다
ZRANGE
↓ syntax
- 지정한 구간에 포함되는 원소를 오름차순으로 반환
- 모든 원소의 score가 동일하지 않으면, BYLEX 결과가 제대로 정렬되지 않음
- (미지정)|BYSCORE|BYLEX : rank(==index, 음수 허용) 구간|score 구간|사전적 구간
- REV : 내림차순 탐색
- LIMIT : SQL의 LIMIT limit OFFSET offset과 유사한 옵션. count가 음수인 경우, offset 이후 모든 원소를 반환한다
↓ redis-cli
주의. BYSCORE, BYLEX에서는 min, max의 위치가 변경돼야 한다...
ZRANGEBYLEX; Deprecated Since 6.2.0
↓ syntax
Since 6.2.0 :ZRANGEwith BYLEX
ZRANGEBYSCORE; Deprecated Since 6.2.0
↓ syntax
Since 6.2.0 :ZRANGEwith BYSCORE
ZRANGESTORE Since 6.2.0
↓ syntax
ZRANGE결과를 dst에 저장한다(덮어쓰기)
ZRANK
↓ syntax
원소의 index(0부터 시작, 오름차순) 반환. 없으면 nil
ZREM
↓ syntax
원소 삭제. 삭제된 개수 반환
ZREMRANGEBYLEX
↓ syntax
사전적 구간의 원소 삭제. 삭제된 개수 반
ZREMRANGEBYRANK
↓ syntax
rank(==index, 음수 허용) 구간의 원소 삭제. 삭제된 개수 반환
ZREMRANGEBYSCORE
↓ syntax
score 구간의 원소 삭제. 삭제된 개수 반
ZREVRANGE; Deprecated Since 6.2.0
↓ syntax
Since 6.2.0 :ZRANGEwith REV
ZREVRANGEBYLEX; Deprecated Since 6.2.0
↓ syntax
Since 6.2.0 :ZRANGEwith BYLEX REV
ZREVRANGEBYSCORE; Deprecated Since 6.2.0
↓ syntax
Since 6.2.0 :ZRANGEwith BYSCORE REV
ZREVRANK
↓ syntax
원소의 index(0부터 시작, 내림차순) 반환. 없으면 nil
ZSCAN
↓ syntax
sorted set에 대한SCAN
ZSCORE
↓ syntax
원소의 score 반환. 없으면 nil
ZUNION Since 6.2.0
↓ syntax
- 합집합 반환
- WEIGHTS : 각 집합 score 가중치(기본 1)
- AGGREGATE : score 집계 함수(기본 SUM)
- WITHSCORES : 반환 배열의 각 원소 뒤에 score가 포함된다
ZUNIONSTORE
↓ syntax
- ZUNION Since 6.2.0결과를 destination에 저장한다(덮어쓰기)
- 결과 집합 크기를 반환한다
Hash
HDEL
↓ syntax
지정한 field 제거. 제거된 개수 반환
HEXISTS
↓ syntax
field를 포함하면 1, 그 외엔 0 반환
HGET
↓ syntax
지정한 field의 value 반환. 없으면 nil
HGETALL
↓ syntax
전체 field-value 목록 반환
HINCRBY
↓ syntax
value += increment, 값이 없으면 value = increment로 신규 설정. 변경된 value 반환
HINCRBYFLOAT
↓ syntax
value += increment, 값이 없으면 value = increment로 신규 설정. 변경된 value 반환
HKEYS
↓ syntax
전체 field 목록 반환
HLEN
↓ syntax
전체 field-value 쌍 개수 반환
HMGET
↓ syntax
지정 field들에 대해HGET실행한 결과 배열 반환
HRANDFIELD Since 6.2.0
↓ syntax
- 최대 count개의 임의 field 반환
- count가 음수인 경우, 중복이 허용된다
- WITHVALUES : value를 함께 반환한다
HSCAN
↓ syntax
hash에 대한SCAN
HSET
↓ syntax
key에 field-value 쌍 추가. 기존 value는 덮어씌어진다. 추가된 쌍의 개수 반환
HSETNX
↓ syntax
field가 없는 경우에만 field-value 쌍 추가하고 1 반환. 그 외 0 반환
HSTRLEN
↓ syntax
value의 바이트 길이 반환
HVALS
↓ syntax
전체 value 목록 반환
Stream
XACK
↓ syntax
소비자 그룹에서 특정 entry들을 소비 완료했음을 지시
XADD
↓ syntax
- 새 entry 추가. field-value 쌍은 순서를 유지하여 저장되고, 클라이언트에도 동일한 순서로 전달된다
- 추가된 entry의 id를 반환한다
- NOMKSTREAM : key에 스트림이 존재하지 않으면 무시
- 나머지 옵션은XTRIM참고
XAUTOCLAIM Since 6.2.0
↓ syntax
개념적으로 XPENDING 후 XCLAIM을 호출한 것과 동일하다
XCLAIM
↓ syntax
- 지정한 id들에 대하여, min-idle-time 밀리초 이상 소비 완료 대기 중인 entry를 획득한다
- IDLE : 대기 시간 재설정. 기본값은 0이며, 따라서 동일 명령으로 다른 소비자가 동일 entry를 가져가지 못하게 된다
- TIME : 절대값(마지막 entry 배달 시각)을 이용해 대기 시간 재설정
- RETRYCOUNT : 배달 카운터 재설정
- FORCE : 소비 완료 대기 중이지 않은 entry도 처리
- JUSTID : entry의 id만 반환. 배달 카운터를 증가하지 않는다
XDEL
↓ syntax
- 지정 entry 삭제. 삭제된 개수 반환
- 현재까지는 entry 삭제가 즉시 메모리 반환을 의미하지 않는다 -> macro-node의 모든 entry가 삭제 상태가 될 때 정리
XGROUP
CREATE
↓ syntax
- 소비자그룹 생성. 이미 동일 이름의 그룹이 존재하면 에러
- id|$ : 지정 id 다음 엔트리부터 소비|그룹 생성 직후 엔트리부터 소비
- MKSTREAM : key에 스트림이 없으면 생성
CREATECONSUMER Since 6.2.0
↓ syntax
소비자 명시적으로 생성
DELCONSUMER
↓ syntax
소비자 삭제
DESTROY
↓ syntax
소비자그룹 삭제
HELP
↓ syntax
도움말 반환
SETID
↓ syntax
소비 기준 id 재설정
XINFO
CONSUMERS
↓ syntax
- 소비자 정보 반환
- name : 이름
- pending : 소비 완료 대기 entry 개수
- idle : 마지막 통신 이후 ms
GROUPS
↓ syntax
- 소비자 그룹 정보 반환
- name : 이름
- consumers : 소비자 수
- pending 전체 소비 완료 대기 entry 개수
- last-delivered-id : 마지막으로 배달된 entry의 id
- entries-read : 그룹이 읽은 entry 개수(부정확)
- lag : 배달 대기 중인 entry 개수, 아래의 경우 일반 연산이 처리되기 전까지 nil이 반환될 수 있다
- 그룹이 임의 last-delivered-id로 생성된 경우
- 그룹의 last-delivered-id와 스트림의 last-generated-id 사이의 entry가 삭제된 경우
HELP
↓ syntax
도움말 반환
STREAM
↓ syntax
- 스트림 정보 반환
- length : entry 개수
- radix-tree-keys : 하위 데이터 구조에 존재하는 키의 수
- radix-tree-nodes : 하위 데이터 구조에 존재하는 노드 수
- groups : 그룹 개수
- last-generated-id : 마지막으로 추가된 entry의 id
- max-deleted-entry-id : 삭제된 entry 중 최대 id
- entries-added : 스트림에 현재까지 추가된 entry 개수
- first-entry : 첫 번째 entry의 id
- last-entry : 마지막 entry의 id
- FULL : entries, groups 정보 포함. count 기본값은 10
XLEN
↓ syntax
entry 개수 반환. key가 없어도 0
XPENDING
↓ syntax
- key group만 지정한 경우
- 그 외의 경우
[소비 완료 대기 entry 개수, 최소 id, 최대 id, [소비 완료 대기 중인 소비자, 해당 소비자에 대해 대기 중인 entry 개수] ...] 반환
[[소비 완료 대기 중인 entry id, 소비자 이름, 배달 완료 후 시간(ms), 배달 횟수] ...] 반환
XRANGE
↓ syntax
- id가 [start, end] 내에 있는 엔트리 반환
- 열린 구간을 지시하려면 '('를 접두에 붙이면 된다
- 전체를 가져오려면 start, end로 -, + 각각 이용
- COUNT : 최대 count 개만 반환
XREAD
↓ syntax
- 각 스트림에서 지정한 id보다 큰 entry를 count(기본 1)개 반환
- BLOCK : 모든 스트림이 비어있는 경우, 최대 milliseconds 만큼 대기
- BLOCK ... $ : 명령 이후 도착하는 것만 반환
XREADGROUP
↓ syntax
- 소비자로써 엔트리 소비 지시
- XREAD와 겹치는 옵션은 동일한 의미를 가진다
- NOACK : XACK가 필요없다 -> 메시지 전달 즉시 소비 완료한 걸로 간주한다
- entry id로 '>'를 이용하면 알아서 다음 entry를 획득한다
XREVRANGE
↓ syntax
XRANGE의 역순
XTRIM
↓ syntax
- 필요한 경우 오래된 entry들을 삭제
- MAXLEN : 크기가 threshold를 초과하는 경우 삭제
- MINID : threshold보다 작은 id의 entry 삭제
- MAXLEN ~ : 다른 입출력에 지장이 없도록 어느 정도의 오차를 허용
- LIMIT : 최대 count개만 제거
XTRIM mystream MINID 649085820 -> id가 649085820-0보다 작은 entry들을 삭제한다
Pub/Sub
PSUBSCRIBE
↓ syntax
GLOB style pattern에 일치하는 채널들 구독
PUBLISH
↓ syntax
메시지 발행
PUBSUB
CHANNELS
↓ syntax
채널 목록 반환
HELP
↓ syntax
도움말 반환
NUMPAT
↓ syntax
PSUBSCRIBE로 구독 중인 패턴 개수 반환
NUMSUB
↓ syntax
구독자 수 반환
SHARDCHANNELS Since 7.0.0
↓ syntax
샤드 채널 목록 반환
SHARDNUMSUB Since 7.0.0
↓ syntax
샤드 채널 구독자 수 반환
PUNSUBSCRIBE
↓ syntax
구독 취소
SPUBLISH Since 7.0.0
↓ syntax
샤드 채널에 메시지 발행
SSUBSCRIBE Since 7.0.0
↓ syntax
샤드 채널 구독
SUBSCRIBE
↓ syntax
채널 구독
SUNSUBSCRIBE Since 7.0.0
↓ syntax
샤드 채널 구독 취소
UNSUBSCRIBE
↓ syntax
구독 취소
Redis Stack
레디스 서버에 여러 모듈이 추가되어 아래와 같은 기능을 지원한다
- RediSearch : 추가 인덱싱, 쿼리 지원, 전문 검색 등 지원
- RedisJSON : JSON 모델 지원
- RedisGraph : 그래프 모델 지원
- RedisTimeSeries : 기간을 이용한 쿼리, 집계 쿼리 등 지원