Redis 性能:许多查询返回小对象 vs 一个查询返回大对象

sti*_*ser 6 performance redis

我对Redis相当陌生,到目前为止我真的很喜欢它。然而,我开始想知道是否更好 - 性能明智 - 使用返回大对象(以 JSON 存储信息)的单个查询,或者我是否应该使用更多较小的查询,返回较小的对象?

mis*_*ion 6

Redis 是单线程应用程序。每个查询都将严格地一一执行。

答案取决于您的需求和查询响应的大小。如果您尝试在一个查询中获取大量密钥(使用 MULTI 或使用 LUA 脚本),您可能会阻止您的服务器接受新查询。一个查询允许您将总时间保持在尽可能小的范围内。

每个查询是:

  1. 解析查询。
  2. 获取数据。
  3. 用网络发送。

例如:

-------------------------------------------------------------------> time 
           |           |                           |             |
client send query(Q)   |                           |           got it(G)!
redis             execute(E, server blocked)  send response(SR)  
Run Code Online (Sandbox Code Playgroud)

但是,如果你做大量的小查询,信息的总时间会更长。

-------------------------------------------------------------------> time 
         |  |  |  |  |          |  |  |  |  |
client   Q  |  |  G  |    ...   Q  |  |  G  |     ...
redis       E  SR   idle           E  SR   idle 
Run Code Online (Sandbox Code Playgroud)

答案是(如果你有高负载的系统):

  • 如果您需要接收关于几十个键的数据,则更喜欢对它们进行一些查询。
  • 如果您的每个密钥都有大量数据(例如许多千字节),请使用许多查询。

此外,如果您想保存 JSON,请考虑强制使用某种序列化(例如 messagepack 或 lz)以最小化内存消耗。

  • 谢谢,这是我在这个网站上得到的最好的解释之一! (2认同)