[redis] 명령어

DB 2019. 8. 2. 12:28



- 참고

https://redis.io/commands

http://redisgate.kr/redis/introduction/redis_intro.php



- redis 클라이언트

- command line

> redis-cli 명령

- redis desktop manager (redis GUI tool)

https://sourceforge.net/projects/redis-desktop-manager.mirror/



- 명령어 (227개)


-- Strings


--- APPEND key value        O(1)

데이터 연결하여 추가. 키가 없으면 없으면 생성

127.0.0.1:6000> append key1 abcd

"4"

127.0.0.1:6000> get key1

"abcd"

127.0.0.1:6000> append key1 efgh

"8"

127.0.0.1:6000> get key1

"abcdefgh"



--- BITCOUNT key [start end]        O(N)

1 인 비트의 개수를 돌려줌


127.0.0.1:6000> set key 1

OK

127.0.0.1:6000> get key

"1"                

127.0.0.1:6000> bitcount key

(integer) 3       <-- 문자 "1"은 2진수로 "00110010"이기 때문에 1인 bit의 개수는 3

127.0.0.1:6000> bitcount key 0 0

(integer) 3



--- BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]        O(1)

offset(bit) 위치 에 해당 type(데이터 타입)으로 value를 저장하고 가져온다

type은 i8, u5 와 같이 지정

i8 은 signed integer 8 bit 를 의미 2 byte인 word 타입에 해당

u5는 unsigned integer 5 bit 을 의미

offset 을 크게 지정하면 알아서 전체 value 의 길이가 확장된다

초기값은 모두 0으로 초기화되어 있음

- 명령

- GET type offset : offset 위치에 데이터를 type 형식으로 읽어옴

- SET type offset value : offset 위치에 type 형식으로 value 저장

- INCRBY type offset increment : offset 위치에 type 형식으로 increment 값(음수 혹은 양수) 증가

- OVERFLOW

오버/언더 플로우 발생시 처리 방식 지정. (default WRAP)

WRAP : 오버/언더 플로우 발생 시 그대로 진행. ex> i8 인 경우 127 에서 1 증가시 -128이 됨.

SAT : 오버/언더 플로우 발생 시 최대/최소 값 유지. ex> i8 인경우 127에서 1 증가시 127로 유지됨.

FAIL : 오버/언더 플로우 발생 시 실패 처리. ex> i8 인 경우 127에서 1 증가시 null 리턴.

- 사용 예시 1

127.0.0.1:6000> BITFIELD mykey INCRBY i5 100 1 GET u4 0           

1) (integer) 1 <-- INCRBY : 100 번째 bit 의 signed integer 5 bit 숫자로 1씩 증가시킨 값

2) (integer) 0 <-- GET : 0 번째 bit 의 unsigned integer 4bit (1byte) 숫자를 가져옴

127.0.0.1:6000> BITFIELD mykey INCRBY i5 100 1 GET u4 0

1) (integer) 2

2) (integer) 0


- 사용 예시 2

cpu 저장 예시 (https://www.joinc.co.kr/w/man/12/REDIS/RedisWithJoinc/part02#s-4.)

cpu 사용율은 0~100 이기 때문에 u8(0~255) 타입 사용하여 저장


127.0.0.1:6000> BITFIELD cpu:usage:20180829 SET u8 0 12 SET u8 1 25 <-- 저장

1) (integer) 0

2) (integer) 0

127.0.0.1:6000> BITFIELD cpu:usage:20180829 GET u8 0 GET u8 1 <-- 조회

1) (integer) 12

2) (integer) 25



--- BITOP operation destkey key [key ...]        O(N)

BIT 연산 (AND, OR, XOR, NOT)


127.0.0.1:6000> set key1 abcd

OK

127.0.0.1:6000> set key2 abcd

OK

127.0.0.1:6000> bitop and dest key1 key2

(integer) 4

127.0.0.1:6000> get dest

"abcd"


--- BITPOS key bit [start] [end]        O(N)

start ~ end 범위(byte) 에서 찾을 bit(0 or 1) 가 처음 나오는 위치(bit) 를 리턴.

없는경우 -1 리턴.

redis> SET mykey "\xff\xf0\x00"

"OK"

redis> BITPOS mykey 0

(integer) 12

redis> SET mykey "\x00\xff\xf0"

"OK"

redis> BITPOS mykey 1 0

(integer) 8

redis> BITPOS mykey 1 2

(integer) 16

redis> set mykey "\x00\x00\x00"

"OK"

redis> BITPOS mykey 1

(integer) -1

redis


--- DECR key        O(1)

1 감소

--- DECRBY key decrement        O(1)

decrement 숫자 만큼 감소

--- GET key        O(1)

key 값 리턴

--- GETBIT key offset        O(1)

offset의 bit(0 or 1) 를 리턴

--- GETRANGE key start end        O(N)

start ~ end 범위 (byte) 의 글자를 가져옴

redis 2.0 이하의 substr 명령.

--- GETSET key value        O(1)

value를 저장하고 이전 값을 리턴

--- INCR key        O(1)

1 증가

--- INCRBY key increment        O(1)

increment 숫자 만큼 증가


--- INCRBYFLOAT key increment        O(1)

increment 숫자(float) 만큼 증가

--- MGET key [key ...]        O(N)

복수 key 값 조회

--- MSET key value [key value ...]        O(N)

복수 key 값 저장


--- MSETNX key value [key value ...]        O(N)

키가 존재 하지 않는 경우만 저장

여러 키 저장 시 이미 존재하는 키가 하나라도 있는 경우 모두 실패 처리


--- PSETEX key milliseconds value        O(1)

밀리세컨드 단위로 키 만료 시간 지정

--- SET key value [expiration EX seconds|PX milliseconds] [NX|XX]        O(1)

키 값 저장.

만료시간 지정 가능(세컨드, 밀리세컨드)

NX : 키 미존재시에만 저장

XX : 키 존재시에만 저장

--- SETBIT key offset value        O(1)

지정한 offset에 value(bit : 0 or 1)  저장

--- SETEX key seconds value        O(1)

세큰드 단위로 키 만료 시간 지정

SET 과 EXPIRE 명령을 한번에 하는 것과 같음

--- SETNX key value        O(1)

키가 없는 경우에만 저장

--- SETRANGE key offset value        O(1)

offset 위치에 지정한 값으로 변경

offset 이 큰 경우 앞쪽 데이터는 zero padding(0으로 채우짐)

--- STRLEN key        O(1)

value 길이(bytes)

-- Lists

--- BLPOP key [key ...] timeout        O(1)

LPOP의 timeout 버전.

첫번쨰 데이터(left) 를 지우고 가져옴.

데이터가 없는 경우 timeout 초 만큼 대기. (0인경우 무한 대기)

여러개의 key 지정시 하나라도 들어온 경우 리턴한다. (모두 리턴하지 않음)

--- BRPOP key [key ...] timeout        O(1)

RPOP의 timeout 버전.

마지막 데이터(right) 를 지우고 가져옴.

데이터가 없는 경우 timeout 초 만큼 대기. (0인경우 무한 대기)

여러개의 key 지정시 하나라도 들어온 경우 리턴한다. (모두 리턴하지 않음)

--- BRPOPLPUSH source destination timeout        O(1)

RPOPLPUSH의 timeout 버전.

마지막 데이터(right)를 첫번째 데이터(left)에 넣는다.

데이터가 없는 경우 timeout 초 만큼 대기. (0인 경우 무한 대기)

--- LINDEX key index        O(N)

리스트의 특정 index 데이터 조회

index는 양수/음수로 지정 가능. (양수 : 첫번쨰 부터.., 음수 : 마지막 부터..)

--- LINSERT key BEFORE|AFTER pivot value        O(N)

pivot 기준으로 전/후에 value 삽입

pivot : 기준이 되는 index 혹은 데이터 값

--- LLEN key        O(1)

리스트 길이 리턴(데이터 개수)

--- LPOP key        O(1)

첫번째 데이터(left) 제거 및 리턴

--- LPUSH key value [value ...]        O(1)

첫번째(left)에 데이터 삽입.

--- LPUSHX key value        O(1)

key 존재시에만 value를 첫번째(left)에 저장.

--- LRANGE key start stop        O(S+N)

start ~ stop 인덱스 범위 데이터 조회

--- LREM key count value        O(N)

count 개수 만큼 value 와 같은 값을 갖는 요소 삭제.

count가 0이 경우 value 와 같은 값을 갖는 모든 요소 삭제.

count가 음수인 경우 뒤에서 부터 삭제

--- LSET key index value        O(N)

특정 index의 값을 value 로 변경

--- LTRIM key start stop        O(N)

start ~ stop 인덱스 외의 데이터를 모두 삭제

음수 사용시 뒤에어 부터의 인덱스.

--- RPOP key        O(1)

마지막 데이터(right) 제거 및 리턴


--- RPOPLPUSH source destination        O(1)

source 키의 마지막 데이터(right)를 꺼내 destination 키의 첫번쨰 데이터(left)에 넣음

--- RPUSH key value [value ...]        O(1)

마지막(right)에 데이터 삽입.

--- RPUSHX key value        O(1)

key 존재시에만 value를 마지막(right)에 저장.




-- Sets

--- SADD key member [member ...]        O(1) O(N)

데이터 저장

--- SCARD key        O(1)

멤버 개수

--- SDIFF key [key ...]        O(N)

차집합

--- SDIFFSTORE destination key [key ...]        O(N)

차집합을 destination 키에 저장

--- SINTER key [key ...]        O(N*M)

교집합

--- SINTERSTORE destination key [key ...]        O(N*M)

교집합을 destination 키에 저장

--- SISMEMBER key member        O(1)

집합에 member가 존재하면 1 리턴. 없으면 0 리턴

--- SMEMBERS key        O(N)

모든 멤버 출력

--- SMOVE source destination member        O(1)

source key 의 member를 destination key 로 이동

성공 1, 실패 0


--- SPOP key [count]        O(1)

멤버를 랜덤으로 count 개수만큼 삭제 및 조회.

--- SRANDMEMBER key [count]        O(1) O(N)

멤버를 랜덤으로 count 개수만큼 조회. (삭제 하지 않음)

--- SREM key member [member ...]        O(N)

멤버 삭제.

삭제된 멤버 수 리턴.


--- SSCAN key cursor [MATCH pattern] [COUNT count]        O(1) O(N)

페이지 조회. (데이터가 많아서 여러번 나눠서 조회할 경우)

cursor : 처음엔 0. 10개 조회하였다면 다으메 11 지정.

count : 조회할 개수(default 10)

MATCH : glob-style pattern 사용

--- SUNION key [key ...]        O(N)

합집합

--- SUNIONSTORE destination key [key ...]        O(N)

합집합을 destination 키에 저장

-- Sorted Sets (zset)

--- BZPOPMAX key [key ...] timeout        O(log(N))

score 가 큰 값을 삭제 및 조회.

데이터가 없으면 timeout 초 동안 대기 하며 0인 경우 무한 대기.

--- BZPOPMIN key [key ...] timeout        O(log(N))

score 가 작은 값을 삭제 및 조회.

데이터가 없으면 timeout 초 동안 대기 하며 0인 경우 무한 대기.


--- ZADD key [NX|XX] [CH] [INCR] score member [score member ...]        O(log(N))

데이터 입력. (score : 가중치, member : 값)

NX : 데이터가 없는 경우만 추가.

XX : 데이터가 있는 경우만 업데이트. 

CH : 추가된 멤버 및 업데이트된 멤버(score 변경) 개수를 리턴.

INCR : 하나의 멤버에 대해서만 score 값을 증가/감소 시킬 수 있다.

--- ZCARD key        O(1)

멤버 개수

--- ZCOUNT key min max        O(log(N))

score가 min ~ max 인 경우 조회.

min/max 표기

최소 : -inf

최대 : +inf

5 초과 : (5

5 이상 : 5

--- ZINCRBY key increment member        O(log(N))

increment 값만큼 score 증가/감소

--- ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]        O(N*K)+O(M*log(M))

교집합을 destination 키에 저장.

numkeys : 대상 key 개수

WEIGHT :

첫번째 값을 첫번째 키의 score에 곱해질 값.

두번째 값을 두번째 키의 score에 곱해질 값.

...

AGGREGATE

SUM : 각 score 합산 (default)

MIN : 가장 작은 score 사용

MAX : 가장 큰 score 사용

--- ZLEXCOUNT key min max        O(log(N))

mini ~ max 범위의 score 검색

최소 : -

최대 : +

이상 : [

초과 : (

--- ZPOPMAX key [count]        O(log(N)*M)

score가 큰값을 count(default 1) 만큼 리턴하지

--- ZPOPMIN key [count]        O(log(N)*M)

score가 작은값을 count(default 1) 만큼 리턴하지

--- ZRANGE key start stop [WITHSCORES]        O(log(N)+M)

start ~ stop 인덱스(전체 조회는 0 -1) 조회

WITHSCORES : score 값도 같이 조회

--- ZRANGEBYLEX key min max [LIMIT offset count]        O(log(N)+M)

mini ~ max 범위의 멤버 값으로 검색

최소 : -

최대 : +

이상 : [

초과 : (

LIMIT offset count : offset 인덱스 부터 count 개수 만큼 조회

--- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]        O(log(N)+M)

mini ~ max 범위의 score 검색

최소 : -inf

최대 : +inf

이상 : [

초과 : (

WITHSCORES : score 값 같이 조회

LIMIT offset count : offset 인덱스 부터 count 개수 만큼 조회

--- ZRANK key member        O(log(N))

멤버의 score 에 대한 rank(index) 조회

--- ZREM key member [member ...]        O(M*log(N))

멤버 삭제.

삭제된 개수 리턴.

--- ZREMRANGEBYLEX key min max        O(log(N)+M)

min ~ max 범위의 멤버 값으로 삭제.

zset의 score가 모두 같아야 사용 가능.

최소 : -

최대 : +

이상 : [

초과 : (

--- ZREMRANGEBYRANK key start stop        O(log(N)+M)

start ~ stop 범위의 인덱스로 삭제 (음수 사용 가능)

--- ZREMRANGEBYSCORE key min max        O(log(N)+M)

min ~ max의 score 값으로 삭제

최소 : -inf

최대 : +inf

5 이상 : 5

5 초과 : (5

--- ZREVRANGE key start stop [WITHSCORES]        O(log(N)+M)

start ~ stop 범위의 인덱스로 score가 큰값부터 조회

전체조회 : 0 -1

WITHSCORES : score 값 같이 조회

--- ZREVRANGEBYLEX key max min [LIMIT offset count]        O(log(N)+M)

mini ~ max 범위의 멤버값으로 역순 조회

최소 : -

최대 : +

이상 : [

초과 : (

LIMIT offset count : offset 인덱스 부터 count 개수 만큼 조회

--- ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]        O(log(N)+M)

min ~ max의 score 범위로 역순 조회

최소 : -inf

최대 : +inf

5 이상 : 5

5 초과 : (5

WITHSCORES : score 값 같이 조회

LIMIT offset count : offset 인덱스 부터 count 개수 만큼 조회

--- ZREVRANK key member        O(log(N))

멤버의 score 에 대한 역순 rank(index) 조회

--- ZSCAN key cursor [MATCH pattern] [COUNT count]        O(1)

SSCAN 과 동일

--- ZSCORE key member        O(1)

멤버의 score 조회

--- ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]        O(N)+O(M log(M))

합집합을 destination 키에 저장.

numkeys : 대상 key 개수

WEIGHT :

첫번째 값을 첫번째 키의 score에 곱해질 값.

두번째 값을 두번째 키의 score에 곱해질 값.

...

AGGREGATE

SUM : 각 score 합산 (default)

MIN : 가장 작은 score 사용

MAX : 가장 큰 score 사용


-- Hashes

--- HDEL key field [field ...]        O(N)

특정 field 삭제

--- HEXISTS key field        O(1)

field 존재시 1, 미존재시 0 리턴.

--- HGET key field        O(1)

field 의 value 조회.

--- HGETALL key        O(N)

모든 field/value 조회

--- HINCRBY key field increment        O(1)

field의 value 값을 increment 만큼 증가

--- HINCRBYFLOAT key field increment        O(1)

field의 value 값을 increment(float) 만큼 증가

--- HKEYS key        O(N)

모든 field 명 리턴

--- HLEN key        O(1)

filed 개수 리턴

--- HMGET key field [field ...]        O(N)

여러 field의 value 조회

--- HMSET key field value [field value ...]        O(N)

여러 field/value 저장

--- HSCAN key cursor [MATCH pattern] [COUNT count]        O(1)

SSCAN 과 동일

--- HSET key field value        O(1)

field/value 저장.

추가된 경우 1리턴, 이미 존재하여 업데이트 된 경우 0 리턴.

--- HSETNX key field value        O(1)

field 미 존재시에만 filed/value 저장.

--- HSTRLEN key field        O(1)

filed의 value에 대해 byte 길이 리턴.

--- HVALS key        O(N)

모든 value 조회.

-- Streams (X...)

--- XADD key ID field string [field string ...]        O(1)

스트림에 데이터 추가

ID : 

유니크한 값.

* 을 입력하면 "64bit 유닉스 타임 밀리세컨드 - 64bit 시퀀스"의 형식으로 자동생성

MAXLEN : 

ID 앞에 선언하여 최대 크기 지정 (capped stream)

MAXLEN 1000 인경우 - 최대 1000개 까지만 저장. (1000개 초과시 삭제 및 저장이 계속 일어남 -> 성능 저하)

MAXLEN ~ 1000 인경우 - 1000개를 넘을 수 있며 정리 가능할때 초과분 삭제.

--- XLEN key        O(1)

스트림의 id(entry) 개수 리턴

--- XRANGE key start end [COUNT count]        O(N) O(1)

start ~ end 의 id 값으로 검색

최소 : -

최대 +

COUNT : 조회할 개수

--- XREVRANGE key end start [COUNT count]        O(1) O(N)

XRANGE 와 동일하나 역순으로 조회

--- XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]        O(N) O(1)

지정한 ID 값 이상의 데이터 조회.

COUNT : 조회할 개수

BLOCK : 

데이터가 없는 경우 지정한 밀리세컨드 동안 대기. (미사용시 기다리지 않음)

STREAMS : 읽어들일 대상 key


--- XDEL key ID [ID ...]        O(1)

해당 ID 데이터 삭제

--- XTRIM key MAXLEN [~] count        O(N)

최근 count 개수의 데이터만 남기고 모두 삭제.

~ : 성능을 위해 삭제 가능할때 삭제를 진행

--- XGROUP [CREATE key groupname id-or-$] [SETID key groupname id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]        O(1) O(M)

용도

1. CREATE : 스트림 데이터의 소비자 그룸 생성

2. DESTROY : 소비자 그룹 삭제

3. DELCONSUMER : 소비자 그룹에서 특정 소비자 제거

4. SETID : 마지막 전달된 ID 재지정 (전달 시작할 ID를 재지정)

special id '$' : 마지막 데이터의 ID를 의미

--- XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]        O(M) O(1)

소비자 그룹으로 데이터를 읽어들임

group : XGROUP 으로 생성된 그룹 이름

consumer : 사용자 구분용 임의 이름

COUNT : 읽어들일 개수

BLOCK : 데이터가 없는 경우 대기할 밀리세컨드

NOACK : client로 부터 ack 를 받을 필요 없는 경우 사용.

STREAMS : 사용할 스트림 key

ID : 읽어올 기준 ID. special ID '>' 사용 시 명령 실행시 마다 다음 데이터를 읽음.

--- XACK key group ID [ID ...]        O(1)

XREADGROUP 으로 데이터 처리가 완료되었음을 알림.

XACK 하지 않는 경우 미 처리 데이터로 남음.

--- XPENDING key group [start end count] [consumer]

해당 스트림 key 및 그룹에 대한 미처리 데이터 조회.

리턴 : pending 개수, start pending id, end pending id

start end count 지정 시 (ex. - + 2) 상세 정보 리턴.

[id, consumer, pending 된 밀리초, 읽어간 횟수] 배열 리턴

--- XCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [FORCE] [JUSTID]        O(N) O(1)

미처리(pending) 데이터를 consumer 에게 처리하도록 명령.

처리가 완료되면 XACK 를 보내어 완료 시켜야함.


--- XINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP]        O(N)

스트림 정보 출력



-- Pub/Sub

클러스터에서 publish 하면 모든 slave에게 전파되므로 slave에서 subscribe 할 수 있다.

slave 에서 publish 가능.

--- SUBSCRIBE channel [channel ...]        O(N)

채널 구독

--- PSUBSCRIBE pattern [pattern ...]        O(N)

패턴으로 채널 구독

--- UNSUBSCRIBE [channel [channel ...]]        O(N)

채널 구독 취소

--- PUNSUBSCRIBE [pattern [pattern ...]]        O(N+M)

패턴으로 채널 구독 취소

--- PUBLISH channel message        O(N+M)

메시지 출판.

메시지를 받은 클라이언트 수 리턴.

--- PUBSUB subcommand [argument [argument ...]]        O(N) O(1)

PUBSUB CHANNELS [pattern]

: 패턴과 일치하는 채널 목록


PUBSUB NUMSUB [channel-1 ... channel-N]

: 각 채널의 클라이언트 수 조회

PUBSUB NUMPAT

: 패턴으로 구독중인 모든 클라이언트 수 리턴

-- Geo

Sorted Set 사용.

위도(latitude)/경도(longitude)로 두 지점의 거리를 구함. (각 값은 52 bit geohash 값으로 저장됨)

지구를 완전한 구로 가정하여 최대 0.5 % 오차 발생.

Sorted Set 명령어인 ZRANGE(조회), ZREM(삭제), ZCARD(개수) 사용.

--- GEOADD key longitude latitude member [longitude latitude member ...]        O(log(N))

위도/경도 저장

--- GEODIST key member1 member2 [unit]        O(log(N))

두 멤버의 거리 계산

unit : 거리 단위. m(meters : default), km(kilometers), mi(miles), ft(feet)

--- GEOHASH key member [member ...]        O(log(N))

해당 좌표의 geohash 값 계산.

geohash : 

52 bit integer의 인코딩된 11자리 문자열.

http://geohash.org/<geohash-string> 를 통해 위치 확인 가능.

--- GEOPOS key member [member ...]        O(log(N))

해당 멤버의 위도/경도 값 조회

--- GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]        O(N+log(M))

key 에 저장되어있는 멤버중에 입력한 위도/경도/radius 영역에 포함되는 멤버를 검색.

m|km|ft|mi : m(meters), km(kilometers), mi(miles), ft(feet)

WITHCOORD : 좌표 조회

WITHDIST : 거리 조회

WITHHASH : geohash 값 조회

COUNT : 조회할 멤버 수

ASC : 거리가 가까운 멤버부터 표시

DESC : 거리가 먼 멤버부터 표시

STORE : 결과를 특정 키에 저장

STOREDIST : 거리를 특정 키에 저장

--- GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]        O(N+log(M))

지정한 멤버가 radius 영역에 포함되는 멤버 검색.

GEORADIUS 와 동일 옵션 사용.

-- HyperLogLog

원소의 유일한 개수(cadinality 혹은 distinct count) 를 추정하는 방법.

하나씩 체크하는 경우 속도나 메모리 사용이 과도하기 때문에 사용됨.

숫자가 클수록 오차가 줄어 듦.

--- PFADD key element [element ...]        O(1)

element 추가.

element가 존재하는 경우 0 리턴, 그 외 1 리턴.

--- PFCOUNT key [key ...]        O(1) O(N)

element 개수 조회. (추정 오류 1% 이하)

--- PFMERGE destkey sourcekey [sourcekey ...]        O(N)

sourcekey의 합집합을 destkey 에 저장

-- Keys

일반적인 명령어

--- DEL key [key ...]        O(N) O(1)

키 삭제

--- DUMP key        O(1) O(N*M)

key 의 dump 값을 리턴하며 expire time 은 제외 됨.

RESTORE 시 expire time 설정 가능.

--- RESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]        O(1) O(N*M)

dump 데이터 복원.

ttl : expire time (milliseconds), 0인 경우 만료되지 않음.

serialized-value : DUMP key 로 얻은 값

REPLACE : key 존재시 업데이트

ABSTTL : ttl 을 unix timestamp(milliseconds) 로 인식

IDLETIME : key 가 사용되지 않은 경과시간(초)를 임의로 지정. LRU (Least Recently Used : 가장 오래 사용되지 않음) 관련.

FREQ : key 가 사용된 빈도수를 임의로 지정. LFU (Least Frequently Used : 가장 빈도수가 적게 사용) 관련.

--- EXISTS key [key ...]        O(1)

키가 존재하면 1, 아니면 0 리턴.

--- EXPIRE key seconds        O(1)

몇 초 후에 만료될지 지정

--- EXPIREAT key timestamp        O(1)

언제(unix timestamp) 만료 될지 초단위 지정

--- PEXPIRE key milliseconds        O(1)

몇 밀리세컨드 후에 만료될지 지정

--- PEXPIREAT key milliseconds-timestamp        O(1)

언제(unix timestamp) 만료 될지 밀리세컨드 단위 지정

--- KEYS pattern        O(N)

패턴에 일치하는 key 이름 조회.

glob-style pattern.

--- MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]]        O(N)

다른 redis 서버로 키를 복사/이동.

key|"" : 원본 key 이름 혹은 "" 사용 후 [KEYS key [key ...]] 를 통해 여러 키를 지정할 수 있음.

destination-db : db 번호 (0 ~ 15)

timeout : 전송 타임아웃(밀리세컨드)

COPY : 원본 유지

REPLACE : 원격지에 키 존재시 업데이트

--- MOVE key db        O(1)

지정한 db(0 ~15) 로 key를 이동.

지정한 db에 key 가 존재하거나 소스 db 에 key가 존재하지 않는 경우 아무 동작 하지 않음.

--- OBJECT subcommand [arguments [arguments ...]]        O(1)

키에 대한 정보 조회.

OBJECT REFCOUNT <key> : value 참조 횟수 (디버깅에 유용)

OBJECT ENCODING <key> : value 의 내부 타입 조회 (raw, int, ziplist, intset, ....)

OBJECT IDLETIME <key> : key 가 사용되지 않은 경과시간(초)

OBJECT FREQ <key> : key 가 사용된 빈도수

OBJECT HELP : 설명서

--- PERSIST key        O(1)

expire time 을 삭제하여 영구 보존으로 변경함.

--- TTL key        O(1)

expire time 을 seconds 로 조회

--- PTTL key        O(1)

expire time 을 milliseconds 로 조회

--- RANDOMKEY        O(1)

랜덤으로 키 조회

--- RENAME key newkey        O(1)

키 이름 변경.

newkey 존재시 삭제.

--- RENAMENX key newkey        O(1)

newkey 미존재시에만 이름 변경

--- SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

데이터 타입과 상관없이 모든 key 이름을 페이징 조회.

SCAN 참고.

--- SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]        O(N+M*log(M))

list, set, sorted set의 data를 정렬하여 조회.

BY pattern : 지정된 value로 정렬

LIMIT offset count : offset 부터 count 만큼 조회

GET pattern : 다른 key의 value 조회시 사용. pattern은 키에 대한 패턴임.

ASC|DESC : 오름차순|내림차순

ALPHA : value 에 문자열이 있는 경우 지정

STORE : 결과 저장할 key 지정

--- TOUCH key [key ...]        O(N)

마지막 access time 갱신

--- TYPE key        O(1)

value의 데이터 타입 리턴.

string, list, set, zset, hash, stream

--- UNLINK key [key ...]        O(1) O(N)

키 삭제(DEL) 과 동일하나 비동기로 이루어짐 (not blocking)

--- WAIT numreplicas timeout        O(1)

numreplicas 개수 만큼의 replicas 에 대해 write 명령이 끝날때까지

현재 클라이언트의 명령을 timeout(밀리세컨드) 까지 대기 시키다.

timeout 이 0 인경우 무한 대기

-- Transactions

여러 명령어를 하나의 트랜잭션으로 처리할 수 있는 명령어

--- MULTI

트랜잭션 시작

--- EXEC

트랜잭션 커밋

--- DISCARD

트랜잭션 롤백

--- WATCH key [key ...]        O(1)

key의 원본 value가 EXEC 할때와 WATCH 했을때의 값이 다르면 변경하지 않는다.

case> 

set mykey 1

watch mykey

set mykey 2 <-- watch 후 변경

multi

set mykey 3

exec <-- watch 후 변경되었기 때문에 set mykey 3 은 동작하지 않고 값은 2로 남는다.

--- UNWATCH        O(1)

이전에 WATCH 한 key 를 모두 UNWATCH 한다.

EXEC나 DISCARD 를 사용했다면 UNWATCH 할 필요 없음.

-- Connection

--- AUTH password

인증

--- ECHO message

동일한 메시지를 리턴

--- PING [message]

message 를 돌려준다.

message가 없는 경우 PONG 을 돌려줌.

--- QUIT

커넥션 종료


--- SELECT index

db(0 ~ 15) 선택

--- SWAPDB index index

두 db(0 ~ 15) 를 swap 한다.

-- Server

--- BGREWRITEAOF

수동으로 AOF(append only file) 파일의 용량을 줄이기 위해 다시 쓰도록 명령한다.

--- SAVE

RDB 파일을 sync 방식으로 저장.

--- BGSAVE

RDB 파일을 별도 프로세스를 띄워 저장.

LASTSAVE 명령으로 성공여부 체크 가능.

--- CLIENT GETNAME        O(1)

현재 커넥션의 클라이언트 이름 조회

--- CLIENT SETNAME        O(1)

현재 커넥션의 클라이언트 이름 지정

--- CLIENT ID        O(1)

연결 순서로 항상 증가하는 숫자.

--- CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]        O(N)

클라이언트 연결 강제 종료

TYPE : 클라이언트 종류. normal은 일반 사용자.

SKIPME : 자기자신도 연결 종료할지 여부(default yes)

--- CLIENT LIST [TYPE normal|master|replica|pubsub]        O(N)

클라이언트 조회

--- CLIENT PAUSE timeout        O(1)

timeout (밀리세컨드) 동안 모든 응답을 중지한다. (master, slave 통신은 유지)

--- CLIENT REPLY ON|OFF|SKIP        O(1)

현재 커넥션에 대해 응답 여부를 지정.

ON : default. 서버로 부터 모든 응답을 받음.

OFF : 응답을 받지 않음.

SKIP : 응답 커맨드 스킵

--- CLIENT UNBLOCK client-id [TIMEOUT|ERROR]        O(log(N))

block 되어있는 (ex. BRPOP, XREAD, WAIT 같은 명령) 클라이언트를 unblock 시킨다.

TIMEOUT : timeout 으로 unblock 되도록 함.

ERROR : 에러 리턴하여 unblock 되도록 함.

--- COMMAND        O(N)

명령어 조회

--- COMMAND COUNT        O(1)

명령어 개수 조회

--- COMMAND GETKEYS 명령어        O(N)

명령어 실행시 어떤 키가 생성되는지를 보여줌. (실제 생성되진 않음)

--- COMMAND INFO command-name [command-name ...]        O(N)

명령어 정보 조회

-- CONFIG GET parameter

설정 파라미터 조회.

모두 bytes 로 표시되며 파라미터가 여러개면 한줄로 표시됨.

* 사용 가능.

--- CONFIG RESETSTAT        O(1)

INFO 명령의 통계 정보를 초기화

--- CONFIG REWRITE

메모리에 있는 설정을 파일에 쓴다.

--- CONFIG SET parameter value

파라미터 설정

--- DBSIZE

현재 db(0 ~ 15) 의 key 개수

--- DEBUG OBJECT key

디버깅용. 키 정보 조회.

--- DEBUG SEGFAULT

디버깅용. segmentation fault 를 일으키는 코드가 실행 됨.

--- FLUSHALL [ASYNC]

모든 db(0 ~15)의 모든 데이터(key, value) 삭제.

ASYNC 사용시 별도 스레드에서 작업.

--- FLUSHDB [ASYNC]

현재 db 의 모든 데이터 삭제.

ASYNC 사용시 별도 스레드에서 작업.

--- INFO

각종 정보 및 통계 조회


--- LASTSAVE

RDB 마지막 저장 시간을 unix timestamp 로 조회

--- MEMORY DOCTOR

메모리 관련 리포트를 보여줌

--- MEMORY HELP

메모리 명령어 사용법

--- MEMORY MALLOC-STATS

통계 리포트 출력 (jemalloc 사용시만 가능)

--- MEMORY PURGE

메모리 정리 (jemalloc 사용시만 가능)

--- MEMORY STATS

메모리 상태 조회

--- MEMORY USAGE key [SAMPLES count]        O(N)

키의 메모리 사용량 조회

SAMPLES : list, set, sorted set, hash 의 경우 샘플링할 개수. 0인 경우 모두 사용.

--- MONITOR

디버깅용.

서버에서 실행되는 모든 명령 감시

--- REPLICAOF host port

master 노드 지정하여 자신을 slave 노드로 만듦.

--- SLAVEOF host port

redis 5 부턴 REPLICAOF 명령어 사용. (slave 란 단어가 replica 로 모두 변경됨)

--- ROLE

현재 서버 역할 조회.

master, slave, sentinel

--- SHUTDOWN [NOSAVE|SAVE]

서버 종료

--- SLOWLOG subcommand [argument]

느린 작업을 로깅.

세팅 : redis.conf

slowlog-log-slower-than : default 10 millisecond 초과시 기록.

slowlog-max-len : default 128. 128 개 까지 메모리에 보관.

SLOWLOG GET <count> : 조회

SLOWLOG LEN : 기록된 개수 조회

SLOWLOG RESET : 기록 삭제


--- SYNC

복제를 위한 내부 명령(설명이 없음)


--- TIME        O(1)

현재 서버 시간 조회

unix timestamp microseconds


-- Cluster

--- CLUSTER ADDSLOTS slot [slot ...]        O(ㅜ)

slot 할당.

master 노드에서 실행하며 이미 다른 곳에 할당한 slot 이면 에러 발생.

--- CLUSTER COUNT-FAILURE-REPORTS node-id        O(N)

특정 노드(node-id)의 실패 보고서 수를 리턴

--- CLUSTER COUNTKEYSINSLOT slot        O(1)

slot 에 있는 key의 개수를 리턴

--- CLUSTER DELSLOTS slot [slot ...]        O(N)

master 에서 slot 제거

--- CLUSTER FAILOVER [FORCE|TAKEOVER]        O(1)

slave를 master 로 변경.

FORCE : master 장애시 사용

TAKEOVER : master 장애시 master가 2개 이하인 경우 사용

--- CLUSTER FORGET node-id        O(1)

클러스터 탈퇴


--- CLUSTER GETKEYSINSLOT slot count        O(log(N))

slot 의 키 를 count 만큼 조회

--- CLUSTER INFO        O(1)

클러스터 상태 정보 조회

--- CLUSTER KEYSLOT key        O(N)

해당 key의 slot 번호 조회

--- CLUSTER MEET ip port        O(1)

클러스터 참여

--- CLUSTER NODES        O(N)

클러스터 참여 노드 정보 조회

--- CLUSTER REPLICAS node-id        O(1)

master 노드(node-id) 의 replica 노드 리스트 리턴

--- CLUSTER SLAVES node-id        O(1)

redis 5 부터 "CLUSTER REPLICAS node-id" 사용

--- CLUSTER REPLICATE node-id        O(1)

master 노드(node-id) 의 slave 로 지정.

--- CLUSTER RESET [HARD|SOFT]        O(N)

클러스터로 부터 현재 노드를 제외시킨다.

SOFT : default.

HARD : node id가 새로 생성되고 currentEpoch/configEpoch가 0이 됨.

--- CLUSTER SAVECONFIG        O(1)

nodes.conf 파일에 클러스터 정보를 저장.

자동 저장되지만 수동 명령이 제공되고 있음.

--- CLUSTER SET-CONFIG-EPOCH config-epoch        O(1)

config-epoch 값으로 변경

--- CLUSTER SETSLOT slot IMPORTING|MIGRATING|STABLE|NODE [node-id]        O(1)

slot 이동.

IMPORTING : node-id의 slot을 가져옴

MIGRATING : node-id 로 slot을 보냄

STABLE : importing/migrating 취소

NODE : 자신이 갖고 있는 slot을 node-id로 보냄

--- CLUSTER SLOTS        O(N)

각 노드의 slot 정보 조회

--- READONLY        O(1)

slave 노드에서 read 쿼리를 할 수 있도록 함.

(readonly가 아닌경우 master로 redirect 됨)

--- READWRITE        O(1)

slave 노드에서 READONLY 비활성화




-- Scripting (lua)

--- EVAL script numkeys key [key ...] arg [arg ...]        O(lua script)

--- EVALSHA sha1 numkeys key [key ...] arg [arg ...]        O(lua script)

--- SCRIPT DEBUG YES|SYNC|NO        O(1)

--- SCRIPT EXISTS sha1 [sha1 ...]        O(N)

--- SCRIPT FLUSH        O(N)

--- SCRIPT KILL        O(1)

--- SCRIPT LOAD script        O(N)

* glob-style pattern

? : 한 문자

* : 모든 문자

[ae] : a 또는 e

\ : 특수문자 지정시 앞에 사용

[^e] : e가 아닌 경우

[a-b] : a 부터 b