2017-08-01 31 views
0

我们有一个使用Redis进行缓存的Web应用程序。Redis String在批处理/事务中获取?

我注意到一些等待时间尖峰当与200KB值一个密钥与几乎并发请求(的Fiddler移+相同的请求的ř20 - 50倍)进行访问。

该物品的正常读取时间大约为50ms,但峰值约为800ms。

spike

我在想,如果有一种方法来优化呢?有没有办法使用管道/批处理GET?它会有所作为吗?

回答

0

这可能吗?也许。问题是,你所看到的请求是不相关的,彼此不知道。所以,我们要做配料,你需要做的是这样的:

  1. 收集所有的键从传入的请求,请求。
  2. 每n毫秒会为多个密钥发出单个redis GET
  3. 将结果分配给所有等待的呼叫者。

这会产生很多管理开销并降低请求速度。

使用内存中的cache可能会更好地在一段时间内存储结果,并将它们重用以用于将来的请求。

由于其他请求目前从redis中获取的密钥请求来到的情况,这仍然很棘手。如果你关心这种事情,可能很难去除空中请求。

+0

谢谢captncraig。内存中缓存的想法听起来不错。我想知道为什么Redis StringGet似乎突然涌现。我认为这可能与争取在Connection上访问的请求有关。 – Water

+0

由于时间不好,感觉您的redis实例可能尺寸过小或效能不足,但很难从这里得知。可能是任何数量的网络因素或配置。 – captncraig

+0

对于redis实例,20-50个请求实际上是一个很小的数字。即使是小型服务器上的大型请求也应该比这更快。 – captncraig

相关问题