为啥 Redis 的 SET 性能优于 GET?
Posted
技术标签:
【中文标题】为啥 Redis 的 SET 性能优于 GET?【英文标题】:Why is Redis SET performance better than GET?为什么 Redis 的 SET 性能优于 GET? 【发布时间】:2013-01-14 02:03:59 【问题描述】:根据 Redis benchmarks,Redis 每秒可以执行 100'000 次 SET 操作,以及 80'000 次 GET 操作/s。 Redis 是一个内存数据库,这似乎令人惊讶,因为通常人们会期望内存写入比读取慢一些,例如考虑到 SET 需要在写入值之前分配内存。
有人能解释为什么 SET 比 GET 快吗?
【问题讨论】:
【参考方案1】:实际上,这只是默认情况下测量的 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 的处理速度要慢三倍。
【讨论】:
附注在 MBA 11" i7 版本中进行的测试。以上是关于为啥 Redis 的 SET 性能优于 GET?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 React 的性能优于使用 JQuery 的直接 DOM 操作?
为啥我的 Glassfish3.1.2.2/MyFaces2.1.9/JSF 管理的性能优于 TomEE1.5+/CDI 管理的性能?