如何在 Redis 中从 hmset() 切换到 hset()?

Hou*_*man 5 python redis

我收到了 deprication 警告,即 Redis.hmset() 已弃用。使用 Redis.hset() 代替。

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

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

以上工作,但这需要一个名为 name 的第一个参数。

r.hset(name, "myKey", info)
Run Code Online (Sandbox Code Playgroud)

我不清楚在文档中比较hsethmset

小智 14

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

r.hset("myKey", mapping=info)
Run Code Online (Sandbox Code Playgroud)

代替

r.hset("myKey", info)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案 - 问题的目标是在一次调用中设置多个字段 - 而不是如何单独设置每个字段。 (3认同)

cha*_*ash 9

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

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

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

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


Ers*_*soy 1

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

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')
Run Code Online (Sandbox Code Playgroud)
  • 第一个参数是键名
  • 第二个参数是字段名称
  • 第三个参数是字段的值。

  • 这可以工作,但不是使用相同的预期操作(即设置多个字段的一次调用)从 hset 到 hmset 的良好切换,因此这不应该是正确的答案。 (3认同)