redis压力测试

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

Usage: redis-benchmark [-h ] [-p ] [-c ] [-n  [-k ]
 
 -h       Server hostname (default 127.0.0.1)
 -p           Server port (default 6379)
 -s         Server socket (overrides host and port)
 -a       Password for Redis Auth
 -c        Number of parallel connections (default 50)
 -n       Total number of requests (default 100000)
 -d           Data size of SET/GET value in bytes (default 2)
 -dbnum         SELECT the specified db number (default 0)
 -k        1=keep alive 0=reconnect (default 1)
 -r    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         Pipeline  requests. Default 1 (no pipeline).
 -q                 Quiet. Just show query/sec values
 --csv              Output in CSV format
 -l                 Loop. Run the tests forever
 -t          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 通过管道传输 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压力测试)