Ruby 为什么我的redis测试没有从对象中查找哈希那么快?

Ruby 为什么我的redis测试没有从对象中查找哈希那么快?,ruby,redis,Ruby,Redis,我认为redis测试的速度至少与在对象中进行哈希查找的速度相同 从散列中查找值的对象 ruby-1.9.2-p180 :022 > quick(1000) {@p.lookup(:summary_header)} #=> nil Rehearsal ------------------------------------ 0.000000 0.010000 0.010000 ( 0.006522) --------------------------- total

我认为redis测试的速度至少与在对象中进行哈希查找的速度相同

从散列中查找值的对象

ruby-1.9.2-p180 :022 > quick(1000) {@p.lookup(:summary_header)}   #=> nil
Rehearsal ------------------------------------
   0.000000   0.010000   0.010000 (  0.006522)
--------------------------- total: 0.010000sec

       user     system      total        real
   0.010000   0.000000   0.010000 (  0.006701)
vs一个简单的Redis查找

ruby-1.9.2-p180 :023 > quick(1000) {r.get("header")}   #=> nil
Rehearsal ------------------------------------
   0.020000   0.020000   0.040000 (  0.088880)
--------------------------- total: 0.040000sec

       user     system      total        real
   0.030000   0.020000   0.050000 (  0.085839)

Redis速度很快,但它不能像直接内存访问那样快。它需要构造请求、发布请求、等待响应、解码响应,并将该值返回到应用程序。Redis作为一个单独的进程运行,因此即使进程间通信位于同一台机器上,您也必须为此付出代价


按照你的基准测试,它只慢了12倍,这仍然令人印象深刻。

Redis速度很快,但它不能像直接内存访问那样快。它需要构造请求、发布请求、等待响应、解码响应,并将该值返回到应用程序。Redis作为一个单独的进程运行,因此即使进程间通信位于同一台机器上,您也必须为此付出代价


通过基准测试,它只慢了12倍,这仍然令人印象深刻。

为什么它不能实例化一个本地对象,并从中提取用于小数据集的数据?如果您使用的是Redis,那么您使用的是存储在外部进程中的数据。如果这是您想要的,您可以缓存它,但它与MySQL或任何其他服务器进程相同。你必须提出请求并等待答复,这比直接从分配给Ruby进程的内存中获取某些内容要花费更多的时间。我猜如果不是分布式数据存储,它似乎可以自动缓存。因为无法保证只有您的进程会改变Redis存储,你不能有缓存它的默认行为。为什么它不能实例化一个本地对象并从中提取用于小数据集的数据?如果你使用的是Redis,那么你使用的是存储在外部进程中的数据。如果这是您想要的,您可以缓存它,但它与MySQL或任何其他服务器进程相同。你必须提出请求并等待答复,这比直接从分配给Ruby进程的内存中获取某些内容要花费更多的时间。我猜如果不是分布式数据存储,它似乎可以自动缓存。因为无法保证只有您的进程会改变Redis存储,您不能将默认行为设置为缓存它。