美文网首页
redis压力测试

redis压力测试

作者: Lisong | 来源:发表于2019-05-13 15:51 被阅读0次

    Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 (类似于 Apache ab 程序)。你可以使用 redis-benchmark -h 来查看基准参数。

    Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
     
     -h <hostname>      Server hostname (default 127.0.0.1)
     -p <port>          Server port (default 6379)
     -s <socket>        Server socket (overrides host and port)
     -a <password>      Password for Redis Auth
     -c <clients>       Number of parallel connections (default 50)
     -n <requests>      Total number of requests (default 100000)
     -d <size>          Data size of SET/GET value in bytes (default 2)
     -dbnum <db>        SELECT the specified db number (default 0)
     -k <boolean>       1=keep alive 0=reconnect (default 1)
     -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD
      Using this option the benchmark will expand the string __rand_int__
      inside an argument with a 12 digits number in the specified range
      from 0 to keyspacelen-1. The substitution changes every time a command
      is executed. Default tests use this to hit random keys in the
      specified range.
     -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).
     -q                 Quiet. Just show query/sec values
     --csv              Output in CSV format
     -l                 Loop. Run the tests forever
     -t <tests>         Only run the comma separated list of tests. The test
                        names are the same as the ones produced as output.
     -I                 Idle mode. Just open N idle connections and wait.
    

    常用参数

    选项 描述 默认值
    -h 指定服务器主机名 127.0.0.1
    -p 指定服务器端口 6379
    -s 指定服务器socket
    -c 指定并发连接数 50
    -n 指定请求数 10000
    -d 以字节的形式指定 SET/GET 值的数据大小 2
    -k 1=keepalive ,0=reconnect 1
    -r SET/GET/incr 使用随机key,SADD使用随机值
    -P 通过管道传输 <numreq> 1
    -q 强制退出redis,仅显示query/sec 值
    --csv 以CSV格式输出
    -l 生成循环,永久执行测试
    -t 仅运行以逗号分隔的测试命令列表
    -I Idle 模式,仅打开N个idle 连接并等待

    压测命令

    redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 10000 -t get
    
    redis-benchmark -t set,lpush -n 100000 -q
    
    SET: 74239.05 requests per second
    LPUSH: 79239.30 requests per second
    
    redis-benchmark -n 100000 -q script load "redis.call('set','foo','bar')"
    
    script load redis.call('set','foo','bar'): 43271.31 requests per second
    
    redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -q -P 16
    

    选择测试键的范围大小
    假设我们想设置 10 万随机 key 连续 SET 100 万次,我们可以使用下列的命令

    redis-benchmark -h 127.0.0.1 -p 6379 -t set -r 100000 -n 1000000
    
    
    ====== SET ======
      1000000 requests completed in 13.86 seconds
      50 parallel clients
      3 bytes payload
      keep alive: 1
     
    99.76% `<=` 1 milliseconds
    99.98% `<=` 2 milliseconds
    100.00% `<=` 3 milliseconds
    100.00% `<=` 3 milliseconds
    72144.87 requests per second
    

    使用 pipelining
    默认情况下,每个客户端都是在一个请求完成之后才发送下一个请求 (benchmark 会模拟 50 个客户端除非使用 -c 指定特别的数量), 这意味着服务器几乎是按顺序读取每个客户端的命令。Also RTT is payed as well.
    Redis pipelining 可以提高服务器的 TPS ,记得在多条命令需要处理时候使用 pipelining。

    redis-benchmark -n 10000 -t set,get -P 16 -q
    
    SET: 583771.12 requests per second
    GET: 414765.66 requests per second
    

    相关文章

      网友评论

          本文标题:redis压力测试

          本文链接:https://www.haomeiwen.com/subject/dwqraqtx.html