Redisベンチマークによると、Redisは100,000回のSET操作/秒と80,000回のGET操作/秒を実行できます。RedisはインメモリDBであるため、これは驚くべきことのように思われます。これは、通常、メモリの書き込みが読み取りよりもいくらか遅いと予想されるためです。たとえば、SETが値を書き込む前にメモリを割り当てる必要があることを考慮します。
SETがGETよりも速い理由を誰かが説明できますか?
Redisベンチマークによると、Redisは100,000回のSET操作/秒と80,000回のGET操作/秒を実行できます。RedisはインメモリDBであるため、これは驚くべきことのように思われます。これは、通常、メモリの書き込みが読み取りよりもいくらか遅いと予想されるためです。たとえば、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
このコマンドは、I / Oを考慮せずに、要求を内部的に処理するためのCPU時間を提供します。SETの処理は3倍遅くなります。