- 참고
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
'DB' 카테고리의 다른 글
[filebeat] 설치 및 로그 설정 (1) | 2019.10.01 |
---|---|
mysql 5.7 설치 (0) | 2019.09.27 |
[redis] cluster(shard) 방법 - redis 5 on centos 7 (0) | 2019.07.29 |
[redis] replication(master-slave) 및 sentinel(HA) 설치 테스트 - redis 5 on centos 7 (0) | 2019.07.26 |
[mongodb] shard cluster 구성 (0) | 2019.07.18 |
[mongodb] replica set(cluster) PSS 구성 (0) | 2019.07.17 |
[mongodb] replica set(cluster) PSA 구성 (0) | 2019.07.17 |
[mysql] insert loop 더미 데이터 넣기 (0) | 2019.01.25 |