根据Redis benchmark,Redis可以执行100'000 SET操作/秒和80'000 GET操作/秒。 Redis是一个内存数据库,这看起来很令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到SET需要在能够写入值之前分配内存。
有人可以解释为什么SET比GET快吗?
答案 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的处理速度要慢三倍。