哪种redis方法更好:多次调用HSET或调用一次HMSET?

时间:2016-03-21 23:17:28

标签: python redis

我有一份ID列表。对于每个id,我做一个web请求,它返回与id关联的名称。然后将此键/值(id / name)对添加到字典中。完成后,我使用hmset将字典添加到redis。

我想知道在每次请求后立即将每个键/值对添加到redis会更好。

我认为归结为:更昂贵,多次调用redis,或者将值存储在字典中的额外内存使用情况?

3 个答案:

答案 0 :(得分:1)

通常,在使用Redis并优化性能时,最好是保存到网络的行程而不是内存字节。

Redis非常efficiently存储数据。如果您在redis-cli会话中运行INFO MEMORY命令,那么您将看到内存的使用量很少。

延迟会影响响应速度,这就是您通常希望尽可能利用流水线操作的原因。 Marc Gravell illustrates在为Redis解释他的C#API时很好。

答案 1 :(得分:0)

不幸的是,我认为没有简单的答案 - 它取决于您实际拥有的约束以及您如何计算此类处理的成本。在某些情况下,记忆比处理时间更有价值,而在其他情况下则相反。

首先 - 确保您是否必须担心这种优化。也许你可以选择对你来说最方便的方法,这就足够了。

在大多数情况下,对Redis的请求速度非常快(与HTTP请求相比),其时间可以忽略不计。

根据您的密钥/值对的大小,将此数据写入redis的成本也可能很高,以至于请求的开销可以忽略不计。

无论如何,如果还不够,那么考虑一下你可能遇到的限制。 E.g:

  • 您的脚本在处理过程中可以使用多少内存?
  • 发出HTTP请求后,redis中对应的key / val应该有多快?
  • 您的redis服务器可以处理多少个请求/秒?

另请注意,使用HMSET会使您的代码更复杂,并且需要更多努力来编写此类脚本。

答案 2 :(得分:0)

您的例程将初始化Redis DB。 正如我所说,首先不要考虑优化。做一些简单易懂和维护的事情,因为这个脚本是一种init Redis DB。 因此,请选择HSET。

如果您遇到性能/运行时问题,可以轻松更改此代码,因为它易于编写。 :)

我建议你跟踪你在redis中使用的密钥,因为你的数据库在使用后可能会变得很乱。

最初不要考虑内存占用,Redis会为您做好管理。 (见Redis FAQ