블로그는 나의 힘!
[ Programing ]/Redis2021. 4. 21. 21:05

참조 링크 : https://yamoe.tistory.com/526


  • 참고

     https://redis.io/commands

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



-- 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 TypeOffset] [SET TypeOffset value] 
                     [INCRBY TypeOffset 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
      ? : 한 문자

'[ Programing ] > Redis' 카테고리의 다른 글

Redis 레퍼런스.  (0) 2024.05.21
[Redis] Reference  (0) 2023.03.02
[Linux] Redis Cluster 설정  (0) 2022.10.20
[Linux] Redis wget 설치  (0) 2022.10.20
Posted by Mister_Q