根据 Redis基准s ,Redis 每秒可以执行 100'000 次 SET 操作,以及 80'000 次 GET 操作/s。Redis 是一个内存数据库,这似乎令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到 SET 需要在能够写入值之前分配内存。
有人可以解释为什么 SET 比 GET 快吗?
根据 Redis基准s ,Redis 每秒可以执行 100'000 次 SET 操作,以及 80'000 次 GET 操作/s。Redis 是一个内存数据库,这似乎令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到 SET 需要在能够写入值之前分配内存。
有人可以解释为什么 SET 比 GET 快吗?
实际上,这只是默认情况下测量的 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 的处理速度要慢三倍。