REDIS //基准测试工具//使用-r <keyspacelen>的SET中的键在GET

时间:2017-02-22 13:02:36

标签: redis

我正在使用基准测试工具测试Redis(版本:0.8.8.384),以及本地包含在zip包中的redis-server.exe。 我使用以下命令来测试keyspace_length: redis-benchmark -t set,get -n 4 -c 1 -d 888 -r 1000

我设法使用RawCap.exe在本地捕获一个跟踪器(.pcap)。 我注意到,SET命令中发送的密钥GET命令中的密钥匹配。我希望使用的密钥存储在本地某处,然后从GET命令中检索,以查询每个随机密钥的值。

我错过了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

似乎这种行为是预期的,因为您只能为redis-benchmark命令运行GET

redis-benchmark  -t get -n 4 -c 1 -d 888 -r 1000
====== GET ======
  4 requests completed in 0.00 seconds
  1 parallel clients
  888 bytes payload
  keep alive: 1

100.00% <= 0 milliseconds
4000.00 requests per second

因此,-t中指定的每个命令都是独立测试的。

修改

您可以传递lua脚本来测试同一个键中的set / get。午餐后研究后的一些想法:)

  • 您可以在执行此操作之前打开MONITOR上的redis-cli以确定发生了什么。重要提示:这会破坏您的基准测试,只需将其设置为使用少量测试查看实际命令(例如redis-benchmark -n 10);
  • 由于您正在加载lua脚本,因此每次都会执行 atomically ,就好像这些命令位于MULTI/EXEC块中一样;
  • 您可以通过指定 __ rand_int __ 参数 AND -r 1000(例如)来锁定两个命令要使用的单个随机数。 -r参数定义了使用的随机整数的范围。如果您未指定__rand_int__参数,则-r 将不会工作(您可以在监控时看到此信息);
  • 关闭MONITOR后,您可以看到,对于较大的-n值,模拟似乎更快。尝试使用-n 10-n 1000,看看是否成立。
  • 阅读https://redis.io/topics/benchmarks:)

剧本:

redis-benchmark -r 10000 -n 1000 eval "redis.call('set',KEYS[1],'xpto') return redis.call('get', KEYS[1])" 1 __rand_int__

示例MONITOR输出:

1487868918.656881 [0 127.0.0.1:50561] "eval" "redis.call('set',KEYS[1],'xpto') return redis.call('get', KEYS[1])" "1" "000000009355"
1487868918.657032 [0 lua] "set" "000000009355" "xpto"
1487868918.657051 [0 lua] "get" "000000009355"