【问题标题】:How to switch from hmset() to hset() in Redis?如何在 Redis 中从 hmset() 切换到 hset()?
【发布时间】:2020-05-15 18:47:15
【问题描述】:

我收到了弃用警告,即 Redis.hmset() 已被弃用。请改用 Redis.hset()。

但是 hset() 需要第三个参数,我无法弄清楚 name 应该是什么。

info = {'users': 10, "timestamp": datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')}
r.hmset("myKey", info)

上述方法可行,但这需要一个名为 name 的第一个参数。

r.hset(name, "myKey", info)

我不清楚比较文档中的 hsethmset

【问题讨论】:

  • 你可以使用hset("myKey", mapping=info)
  • 抱歉好像不能接受。
  • 看来mapping kwarg 是在 3.5.0(2020 年 4 月 29 日)中添加的。如果您的版本较旧,则需要按照@Ersoy 的建议进行操作。
  • @hmm 可能与库的 min-redis 版本有关。自 Redis v4.0.0 起,具有多个字段/值对的 HSET 可用。
  • 我会投票给@hmm,然后再更新一个:) - 不客气,侯曼。

标签: python redis


【解决方案1】:

hmset(name, mapping):给定哈希名称 ("myKey") 和字典 (info) 设置所有键/值对。

hset(name, key=None, value=None, mapping=None):给定一个哈希名称 ("myKey") 一个键和一个值,设置键/值。或者,给定一个字典 (mapping=info),在 mapping 中设置所有键/值对。

来源:https://redis-py.readthedocs.io/en/stable/

如果这不起作用,也许您需要更新库?

【讨论】:

  • 这在技术上是正确的,但不如 David Cano 的答案那么清楚。
【解决方案2】:

问题是您必须在hset() 中指定您要为其提供映射。在你的情况下:

r.hset("myKey", mapping=info)

而不是

r.hset("myKey", info)

【讨论】:

  • 这应该是正确的答案——问题的目标是在一次调用中设置多个字段——而不是如何单独设置每个字段。
【解决方案3】:

您可以为hmset 中的每个field/value 对执行多个hset

r.hset('myKey', 'users', 10)
r.hset('myKey', 'timestamp', datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'))
r.hset('myKey', 'yet-another-field', 'yet-another-value')
  • 第一个参数是键名
  • 第二个参数是字段名
  • 第三个参数是字段的值。

【讨论】:

  • 这可行,但不是使用相同的预期操作从 hset 切换到 hmset 的好方法 - 这是一个设置多个字段的调用 - 所以这不应该是正确的答案。
【解决方案4】:

我使用 Redis.hmset() 如下:

redis.hmset('myKey', info)

如果你使用 Redis.hset() 以下你不会得到警告。

redis.hset('myKey', key=None, value=None, mapping=info)

使用这种用法,我们将跳过单个键和值添加步骤,redis.hset() 会将info 中的所有keyvalue 映射设置为myKey

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 2013-02-22
    • 2021-05-08
    • 2020-03-18
    • 2013-05-08
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2019-09-16
    相关资源
    最近更新 更多