我有一份ID列表。对于每个id,我做一个web请求,它返回与id关联的名称。然后将此键/值(id / name)对添加到字典中。完成后,我使用hmset将字典添加到redis。
我想知道在每次请求后立即将每个键/值对添加到redis会更好。
我认为归结为:更昂贵,多次调用redis,或者将值存储在字典中的额外内存使用情况?
答案 0 :(得分:1)
通常,在使用Redis并优化性能时,最好是保存到网络的行程而不是内存字节。
Redis非常efficiently存储数据。如果您在redis-cli会话中运行INFO MEMORY
命令,那么您将看到内存的使用量很少。
延迟会影响响应速度,这就是您通常希望尽可能利用流水线操作的原因。 Marc Gravell illustrates在为Redis解释他的C#API时很好。
答案 1 :(得分:0)
不幸的是,我认为没有简单的答案 - 它取决于您实际拥有的约束以及您如何计算此类处理的成本。在某些情况下,记忆比处理时间更有价值,而在其他情况下则相反。
首先 - 确保您是否必须担心这种优化。也许你可以选择对你来说最方便的方法,这就足够了。
在大多数情况下,对Redis的请求速度非常快(与HTTP请求相比),其时间可以忽略不计。
根据您的密钥/值对的大小,将此数据写入redis的成本也可能很高,以至于请求的开销可以忽略不计。
无论如何,如果还不够,那么考虑一下你可能遇到的限制。 E.g:
另请注意,使用HMSET
会使您的代码更复杂,并且需要更多努力来编写此类脚本。
答案 2 :(得分:0)
您的例程将初始化Redis DB。 正如我所说,首先不要考虑优化。做一些简单易懂和维护的事情,因为这个脚本是一种init Redis DB。 因此,请选择HSET。
如果您遇到性能/运行时问题,可以轻松更改此代码,因为它易于编写。 :)
我建议你跟踪你在redis中使用的密钥,因为你的数据库在使用后可能会变得很乱。
最初不要考虑内存占用,Redis会为您做好管理。 (见Redis FAQ