【问题标题】:Redis - hmset() in hash - efficiencyRedis - hmset() in hash - 效率
【发布时间】:2017-01-02 19:39:19
【问题描述】:

假设有一个具有 10 个键值的 Redis 哈希。我将它们全部读入 perl 哈希(或任何语言映射/哈希/字典),并且需要更新 3 个值。现在我更改了哈希中的 3 个值,需要将其写回 redis。在 (A) 和 (B) 中,哪一个会更快?

(A)$redis_handle->hmset($redis_hash_name,\%perl_hash);

(B)while ( ($k,$val) = each %three_changed_items_in_perl_hash ) { $redis_handle->hset($redis_hash_name,$k,$val); }

我想要考虑的是: (A) 是一种与 redis 的通信,包含 10 个元素。但是redis只需要更新其中的3个。即使值没有改变,redis也会浪费时间吗? (B) 是与 1 个元素的 redis 的三个通信。

【问题讨论】:

    标签: hash redis


    【解决方案1】:

    最快的方法是发送一个HMSET,它只包含更新的字段及其各自的值。 Redis 只会更新这些字段,不会对未明确提及的字段做任何事情。

    (C) $redis_handle->hmset($redis_hash_name,\%three_changed_items_in_perl_hash);
    

    【讨论】:

    • +1 。但我更多的疑问是“redis 会忽略散列中那些未更改的值吗?” .否则,我需要在执行 (C) 时循环并记下 perl 中更改的内容。
    • 它不会忽略它们,因此它们将被更新为相同的值,这在网络和 CPU 方面是浪费的 - 只需准备一个仅包含更改的哈希并发送即可。
    猜你喜欢
    • 2015-12-18
    • 2015-07-24
    • 2013-08-28
    • 1970-01-01
    • 2017-12-04
    • 2014-11-14
    • 1970-01-01
    • 2020-03-18
    • 2018-03-16
    相关资源
    最近更新 更多