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

时间:2015-12-15 13:10:34

标签: performance redis

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

1 个答案:

答案 0 :(得分:4)

  

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

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

每个查询都是:

  1. 解析查询。
  2. 获取数据。
  3. 通过网络发送。
  4. 例如:

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

    但是,如果您执行大量小查询,则信息的总时间会更长。

    -------------------------------------------------------------------> time 
             |  |  |  |  |          |  |  |  |  |
    client   Q  |  |  G  |    ...   Q  |  |  G  |     ...
    redis       E  SR   idle           E  SR   idle 
    

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

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

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