我正在使用基准测试工具测试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
命令中检索,以查询每个随机密钥的值。
我错过了什么吗?
提前致谢!
答案 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
); MULTI/EXEC
块中一样; -r 1000
(例如)来锁定两个命令要使用的单个随机数。 -r
参数定义了使用的随机整数的范围。如果您未指定__rand_int__
参数,则-r
将不会工作(您可以在监控时看到此信息); MONITOR
后,您可以看到,对于较大的-n
值,模拟似乎更快。尝试使用-n 10
和-n 1000
,看看是否成立。剧本:
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"