Redis-cli

<< Redis Server Performance Redis-benchmark >>

Redis-cli (Redis command line interface)

Redis-cli 사용법을 설명합니다.
이 문서는 버전 4.0.9를 기준으로 작성했습니다.

명령 목록

  • PIPE   대량 데이터를 읽어들일(load) 때 사용합니다.
  • RDB   RDB 파일을 다른 파일 이름으로 저장합니다.
  • STAT   레디스 서버의 중요 통계정보를 주기적으로 보여줍니다.
  • BIGKEYS   데이터 타입별로 큰 키를 찾아 보여줍니다.
  • SCAN   키를 scan 해서 보여줍니다.
  • SLAVE   Redis-cli의 역할을 클론(슬레이브)으로 변경하여 마스터로 부터 어떤 명령들이 오는지 관찰할 수 있습니다.
  • CSV   명령 실행 결과를 CSV(Comma Separated Values) 형태로 출력합니다.
  • Command   명령을 실행합니다.
  • Interactive mode   대화식으로 명령을 실행합니다.
  • LATENCY   응답시간을 연속해서 보여준다.
  • LATENCY-HISTORY   응답시간을 연속해서 보여주는데 15초가 지나면 새 줄에 보여준다.
  • LATENCY-DIST   응답시간을 색이 있는 그래프로 보여준다.
  • INTRINSIC-LATENCY   연산을 수행해서 얻은 응답시간을 기준으로 보여준다.
  • HELP   도움말을 보여준다.

PIPE

  • AOF 파일 또는 명령이 있는 txt 파일을 읽어들일(load) 때 사용합니다. Redis.conf에 지정된 AOF 파일은 레디스 서버가 시작할 때 읽어들입니다. Pipe는 다른 서버의 AOF 파일을 로드할 때 사용하거나 레디스 명령이 있는 txt 파일로 부터 데이터를 받을 때 사용합니다.
  • 소문자(pipe)를 사용합니다.
  • AOF 파일 저장은 BGREWRITEAOF 명령을 사용합니다.
  • 사용법: cat appendonly.aof | redis-cli -h ip -p port --pipe
  • $ cat data.aof | src/redis-cli -p 6001 --pipe
    All data transferred. Waiting for the last reply...
    Last reply received from server.
    errors: 0, replies: 1001
  • 시험용 명령 파일(1백만개 명령) 만들고 pipe로 로드하기
  • $ for i in {000000..999999}; do echo set key$i value$i >> data.txt; done
    $ cat data.txt | redis-cli -p 6000 --pipe
    All data transferred. Waiting for the last reply...
    Last reply received from server.
    errors: 0, replies: 1000000

RDB

  • RDB 파일을 다른 파일 이름으로 저장합니다.
  • Redis.conf에 지정된 파일명으로 저장하는 것은 SAVE, BGSAVE 명령을 사용합니다.
  • 내부적으로 Sync 방식인 SAVE 명령을 사용하므로 바쁜 서버에서는 사용에 주의해야 합니다.
  • 사용법: redis-cli --rdb dump.rdb
  • $ src/redis-cli -p 6001 --rdb dump.rdb
    SYNC sent to master, writing 35753 bytes to 'dump.rdb'
    Transfer finished with success.
  • 스크립트나 cron job에서 사용할 때는 echo $?로 결과를 확인하는 것이 좋습니다. 정상이면 '0'이고 에러가 발생하면 '0' 이외의 값이 나옵니다.

STAT

  • 레디스 서버의 중요 통계정보를 주기적으로 보여준다.
  • 사용법: $ src/redis-cli -p 6001 --stat
  • $ src/redis-cli -p 6001 --stat
    ------- data ------ --------------------- load -------------------- - child -
    keys     mem clients blocked requests connections
    2002   1.69M   1         0           8241 (+1)             7113
    2177   1.72M   1         0           8417 (+176)         7288
    2662   1.75M   1         0           8903 (+486)         7773
    3140   1.78M   1         0           9382 (+479)         8251
    3620   1.87M   2         0           9863 (+481)         8731
    4130   1.88M   1         0         10374 (+511)         9241
    4608   1.91M   1         0         10853 (+479)         9719
    5084   2.00M   2         0         11330 (+477)       10195
    5611   1.98M   1         0         11858 (+528)       10722
  • -i interval(sec) 옵션으로 주기를 설정할 수 있다. 기본은 1초이다.
  • 내부적으로 INFO 명령을 사용하고, 각 항목의 정보는 다음과 같다.
    • keys: 총 키 개수, KEYSPACE의 키(keys) 합계이다.
    • mem: used_memory   MEMORY section - 현재 사용 메모리
    • clients: connected_clients   CLIENTS section - 연결된 클라이언트 수
    • blocked: blocked_clients   CLIENTS section - BLPOP 같은 명령으로 대기중인 클라이언트 수
    • requests: total_commands_processed   STATS section - 처리한 총 명령 수
    • connections: total_connections_received   STATS section - 총 접속 수
    • child: 자식 프로세스가 실행되어서 AOF나 RDB 파일을 저장중이거나, 로딩 중이면 표시된다.
      • BGSAVE(bgsave_in_progress)가 실행중이면 SAVE
      • BGREWRITEAOF(aof_rewrite_in_progress)가 실행중이면 AOF
      • AOF/RDB(loading) 파일을 로딩중이면 LOAD

BIGKEYS

  • 데이터 타입별로 큰 키를 찾아 보여줍니다. 키에 대한 통계 정보를 볼 수 있습니다.
  • 내부적으로 SCAN 명령을 사용하므로 서버에 큰 영향을 주지 않습니다.
  • 아래 예에서 summary 부터 설명하면, String은 'keyFFFF'의 value가 364 바이트로 가장 크고, List는 'mylistB'가 100 items으로 가장 크고, Set은 'mysetB'가 300 members로 가장 큰것을 보여줍니다.   다음은 각 데이터 타입별로 키 개수와 bytes/items/members/fields 수를 보여줍니다.
  • $ src/redis-cli -p 6001 --bigkeys

    # Scanning the entire keyspace to find biggest keys as well as
    # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
    # per 100 SCAN commands (not usually needed).

    [00.00%] Biggest string found so far 'keyB2810' with 10 bytes
    [10.53%] Biggest list found so far 'mylistB' with 100 items
    [19.10%] Biggest string found so far 'keyFFFF' with 364 bytes
    [44.96%] Biggest set found so far 'myset' with 100 members
    [91.42%] Biggest set found so far 'mysetB' with 200 members

    -------- summary -------

    Sampled 7007 keys in the keyspace!
    Total key length in bytes is 51718 (avg len 7.38)

    Biggest string found 'keyFFFF' has 364 bytes
    Biggest list found 'mylistB' has 100 items
    Biggest set found 'mysetB' has 200 members

    7003 strings with 66063 bytes (99.94% of keys, avg size 9.43)
    2 lists with 110 items (00.03% of keys, avg size 55.00)
    2 sets with 300 members (00.03% of keys, avg size 150.00)
    0 hashs with 0 fields (00.00% of keys, avg size 0.00)
    0 zsets with 0 members (00.00% of keys, avg size 0.00)
    0 streams with 0 entries (00.00% of keys, avg size 0.00)

SCAN

  • 키를 scan해서 보여줍니다. --pattern 옵션으로 패턴을 사용할 수 있습니다.
  • Head, more, wc 같은 리눅스 명령과 조합해서 다양하게 사용할 수 있습니다.
  • $ src/redis-cli -p 6001 --scan --pattern 'keyB*' | wc
    5001 5001 43898

SLAVE

  • Redis-cli의 역할을 클론(슬레이브)으로 변경하여 마스터로 부터 어떤 명령들이 오는지 관찰할 수 있습니다.
  • 지정한 서버의 클론처럼 동작한다. 주로 디버그 용도로 사용합니다.
  • $ src/redis-cli -p 6001 --slave
    SYNC with master, discarding 141585 bytes of bulk transfer...
    SYNC done. Logging commands from master.
    "PING"
    "SELECT","0"
    "set","key","value"
    "PING"

CSV

  • 명령 실행 결과를 CSV(Comma Separated Values) 형태로 출력합니다.
  • $ src/redis-cli -p 6001 --csv smembers myset
    "Value37","Value17","Value44", ..., "Value87"

Command

  • 레디스 명령을 바로 실행합니다.
  • --raw 옵션을 사용하면 "(integer)"가 나오지 않습니다.
  • '>' 파일 출력을 사용하면 --raw 옵션을 사용하지 않아도 숫자만 저장됩니다.
  • '>' 파일 출력에 "(integer)"도 저장하고 싶으면 --no-raw 옵션을 사용합니다.
  • $ src/redis-cli -p 6001 incr mycountor
    (integer) 1
    $ src/redis-cli -p 6001 --raw incr mycountor
    2
    $ src/redis-cli -p 6001 incr mycountor > my.txt
    $ cat my.txt
    3
    $ src/redis-cli -p 6001 --no-raw incr mycountor > my.txt
    $ cat my.txt
    (integer) 4
  • 명령을 반복 실행하고 싶으면 -r 숫자 옵션을 사용합니다.
  • $ src/redis-cli -p 6001 -r 5 incr mycountor
    (integer) 5
    (integer) 6
    (integer) 7
    (integer) 8
    (integer) 9
    $ src/redis-cli -p 6001 -r 5 lpush mylist AAAAA
    (integer) 11
    (integer) 12
    (integer) 13
    (integer) 14
    (integer) 15
  • -i 숫자(sec) 옵션을 사용하면 interval를 줄 수 있습니다.
  • $ src/redis-cli -p 6001 -r 5 -i 3 incr mycountor
  • -r -1를 사용하면 계속 반복할 수 있다.
  • $ src/redis-cli -p 6001 -r -1 -i 1 info| grep rss_human
    used_memory_rss_human:7.80M
    used_memory_rss_human:7.80M
    ^C
  • 리눅스 쉘 기능을 사용하면 변수(숫자)를 사용할 수 있다. 이렇게 하면 key와 value에 숫자를 붙여서 바꾸면서 SET 명령을 실행할 수 있다.   이것은 redis-cli 자체가 여러 번 실행되는 것입니다.
  • $ for i in {1..10}; do src/redis-cli -p 6001 set key$i value$i; done
    OK
    ...
    OK
  • 접속 port를 변수로 사용할 수도 있습니다. 여러 서버에 명령을 일괄 실행할 때 유용합니다.
  • $ for i in {6001..6010}; do src/redis-cli -p $i dbsize; done
    (integer) 7011
    (integer) 4231
    ...
    (integer) 8654
    $ for i in {6001..6010}; do src/redis-cli -p $i config rewrite; done
    OK
    ...
    OK

Interactive mode

  • help <commandname>
  • 127.0.0.1:6001> help zadd
        ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
        summary: Add one or more members to a sorted set, or update its score if it already exists
        since: 1.2.0
        group: sorted_set
  • help @<category> Category를 입력하면 데이터 타입별 명령 리스트를 볼 수 있습니다. Category는 generic, list, set, sorted_set, hash, pubsub, transactions, connection, server, scripting, hyperloglog가 있습니다.
  • 127.0.0.1:6001> help @connection
      AUTH password
      summary: Authenticate to the server
      since: 1.0.0

      ECHO message
      summary: Echo the given string
      since: 1.0.0

      PING [message]
      summary: Ping the server
      since: 1.0.0

      QUIT -
      summary: Close the connection
      since: 1.0.0

      SELECT index
      summary: Change the selected database for the current connection
      since: 1.0.0
  • 반복 실행할 수 있습니다.
  • 127.0.0.1:6001> 3 incr mycountor
    (integer) 10
    (integer) 11
    (integer) 12
  • Clear 화면을 지웁니다.
  • 명령 앞 글자를 입력하고 <TAB>을 치면 명령이 완성됩니다.
  • 127.0.0.1:6001> Z<TAB> -> ZADD
  • 화살표를 사용하면 이전/이후 명령을 볼 수 있습니다. 명령은 '.rediscli_history' 파일에 저장됩니다.

LATENCY

  • 10ms마다(1초에 100번) PING을 보내서 얻은 응답시간이다.  응답시간 최소(min), 최대(max), 평균(avg), PING 보낸 횟수를 보여준다.   시간 단위는 millisecond이고 samples가 PING 횟수이다.   멈추려면 ctrl+C를 누른다.
  • static void latencyMode(void) 함수가 실행된다.
  • $ redis-cli -p 6001 --latency
    min: 0, max: 1, avg: 0.14 (15863 samples)

LATENCY-HISTORY

  • 보여주는 내용은 latency와 같고, 주어진 시간 단위로 새 줄에 보여준다.   디폴트는 15초이고 -i second 옵션을 사용해서 간격을 조정할 수 있다.   시간 단위는 millisecond이다.
  • # redis-cli -p 7124 --latency-history -i 5
    min: 0, max: 1, avg: 0.14 (488 samples) -- 5.00 seconds range
    min: 0, max: 1, avg: 0.14 (488 samples) -- 5.01 seconds range
    min: 0, max: 1, avg: 0.13 (488 samples) -- 5.00 seconds range
    min: 0, max: 1, avg: 0.16 (187 samples)^C

LATENCY-DIST

  • 바탕색이 비율(%)이고 문자가 시간을 나타낸다.   시간단위 microsecond이다.   PING 응답시간이 기준이다.   dist는 distribution의 약자이다.
  • static void latencyDistMode(void) 함수가 실행된다.
  • # redis-cli -p 7124 --latency-dist : 1초 간격으로 보여준다.
    # redis-cli -p 7124 --latency-dist -i 5 : 5초 간격으로 보여준다.
    latency distribution mode graph
        그림 2-1   Latency distribution mode graph
  • 문자는 PING 응답시간이 0.01ms 이하일 때 '.', 0.125ms 이하일 때 '-' 등으로 표시된다.
    바탕색은 응답시간의 비율을 나타낸다.   칸(색)이 19개 이므로 약 5% 단위이다.
    첫 번째 줄을 보면 샾(#)은 0.25ms < 응답시간 <= 0.5ms가 약 75%를 차지하고,   별(*)은 0.125ms < 응답시간 <= 0.25ms가 10%,   1은 0.5ms < 응답시간 <= 1ms가 10%,   거의 보이지 않지만 바(-)는 0.01ms < 응답시간 <= 0.125ms가 5%를 뜻한다.

INTRINSIC-LATENCY

  • 이것은 redis-cli에서 연산을 수행해서 얻은 응답시간을 기준으로 보여준다.   CPU 성능을 체크하는 것이라고 보는 편이 적절하겠다.   redis-cli 수행 시 서버를 지정할 필요가 없다.   redis-cli에서 수행되는 것이므로 서버와 같은 박스(머신/VM)에서 수행해야 한다.
  • static void intrinsicLatencyMode(void) 함수가 실행된다.
    아래는 10초 동안 수행한 결과이다.
  • # redis-cli --intrinsic-latency 10
    Max latency so far: 1 microseconds.
    Max latency so far: 3 microseconds.
    Max latency so far: 6 microseconds.
    Max latency so far: 157 microseconds.

    234859166 total runs (avg latency: 0.0426 microseconds / 42.58 nanoseconds per run).
    Worst run took 3687x longer than the average latency.
  • 10초 동안 234,859,166회 수행되었고, 수행 1회당 42.58 nanoseconds가 걸렸다.
    아래는 실제 수행되는 코드이다.

HELP





<< Redis Server Performance Redis-cli Redis-benchmark >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.