REDIS错误:WRONGTYPE操作针对持有错误类型值的键

6

当我像这样将一个对象存储到Redis中时,它能正常工作

payload = {'age': 12}
key = 'animals:cow'
r.hmset(key, payload)

然而,当我通过连接两个字符串来创建密钥时。
payload = {'age': 12}
key = 'animals:' + 'cow'
r.hmset(key, payload)

我遇到了错误

redis.exceptions.ResponseError: WRONGTYPE 操作针对持有错误类型值的键

为什么第二个例子会报错,而 key 字符串与第一个例子中相同?


根据错误信息,键的类型不正确。您是否重新分配了“animals:cow”键的值为字符串或其他非哈希类型? - Surreal Dreams
1个回答

1
我无法复制您的问题。也许您正在混合使用字符串和哈希方法?这是我的环境:
  • Python 3.6.5
  • Redis stable 5.0.5
我使用了您的代码,但我在上面添加了这个:
from redis import StrictRedis
r = StrictRedis(host="localhost", port=6379, db=0)

-你的代码对我有效!
-也许你在使用hmset之前使用了不同的设置方法?
-Redis不仅仅是一个简单的键值存储;在传统的键值存储中,我们将字符串键关联到字符串值。但是,Redis为我们提供了一些额外的选项,这些选项之间的不兼容性可能会导致错误。 https://redis.io/topics/data-types-intro
-除非你有隐藏字符或特殊的unicode版本与不同之处,否则#1和#2之间没有区别:
1. key = 'animals:cow'
2. key = 'animals:' + 'cow'

由于您未共享代码中的元素,您可能存在与Redis相关的类型冲突;即可能以一种方式进行设置,然后尝试以另一种方式进行设置。有许多在Redis中设置值的方法。如果我们以一种方式进行设置,然后以另一种方式进行设置(使用不同的方法),就会发生错误。下面是一些在Redis中设置键和值的示例:

  • 如果值是字符串类型 -> SET <key> <value>
  • 如果值是字符串类型 -> MSET <key> <value> [key value ...]
  • 如果值是哈希类型 -> HSET <key> <field> <value>
  • 如果值是哈希类型 -> HMSET <key> <field> <value> [field value ...]
  • 如果值是列表类型 -> SETRANGE <key> <offset> <value>
  • 如果值是二进制类型 -> SETBIT <key> <offset> <value>

在尝试以不同方式设置的内容时,存在相关问题: WRONGTYPE Operation against a key holding the wrong kind of value php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接