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

mir*_*ixx 11 benchmarking in-memory-database redis

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

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

ant*_*rez 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
Run Code Online (Sandbox Code Playgroud)

现在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
Run Code Online (Sandbox Code Playgroud)

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