为什么Redis SET的性能优于GET?

时间:2013-01-30 09:48:12

标签: redis benchmarking in-memory-database

根据Redis benchmark,Redis可以执行100'000 SET操作/秒和80'000 GET操作/秒。 Redis是一个内存数据库,这看起来很令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到SET需要在能够写入值之前分配内存。

有人可以解释为什么SET比GET快吗?

1 个答案:

答案 0 :(得分:14)

实际上,这只是一种效果,默认情况下,您测量的I / O比实际命令执行时间多。如果您在基准测试中开始启用流水线操作,那么它将更多地衡量实际命令性能,并且数字会发生变化:

$ redis-benchmark -q -n 1000000 -P 32 set foo bar
set foo bar: 338964.03
$ redis-benchmark -q -n 1000000 -P 32 get foo
get foo: 432713.09 requests per second

现在GET更快: - )

我们应该在基准测试文档页面中包含流水线。

编辑:这在这里更为明显:

redis 127.0.0.1:6379> info commandstats
# Commandstats
cmdstat_get:calls=1001568,usec=221845,usec_per_call=0.22
cmdstat_set:calls=831104,usec=498235,usec_per_call=0.60

此命令提供内部服务请求的CPU时间,而不考虑I / O. SET的处理速度要慢三倍。