当我像这样将对象存储到Redis时,它可以正常工作
payload = {'age': 12}
key = 'animals:cow'
r.hmset(key, payload)
但是当我通过连接2个字符串来创建密钥时
payload = {'age': 12}
key = 'animals:' + 'cow'
r.hmset(key, payload)
我收到错误
redis.exceptions.ResponseError:WRONGTYPE针对持有错误值的键的操作
当key
字符串与第一个示例中的字符串相同时,为什么第二个示例会出错?
答案 0 :(得分:1)
我无法复制您的问题。也许您要混合使用字符串和哈希方法?这是我的环境:
我使用了您的确切代码,但我在上面添加了以下代码:
from redis import StrictRedis
r = StrictRedis(host="localhost", port=6379, db=0)
-您的代码对我有用!
-也许在hmset之前使用了不同的set方法?
-Redis不仅仅是普通的键值存储;在传统键值存储中,我们将字符串键与字符串值相关联。但是,Redis为我们提供了一些其他选项,这些选项之间的不兼容会导致错误。
https://redis.io/topics/data-types-intro
-除非您具有不相同的隐藏字符或特殊的unicode版本,否则#1和#2之间没有区别:
1. key = 'animals:cow'
2. key = 'animals:' + 'cow'
由于未共享代码中的元素,Redis可能会发生类型冲突。即,也许您设置了一种方式,然后尝试设置另一种方式。在Redis中有很多设置值的方法。如果我们设置一种方式,然后设置另一种方式(使用不同的方法),则会发生错误。以下是一些有关如何在Redis中设置键和值的示例:
<key> <value>
<key> <value> [key value ...]
<key> <field> <value>
<key> <field> <value> [field value ...]
<key> <offset> <value>
SETBIT <key> <offset> <value>
尝试获取设置方式不同的一个相关问题: WRONGTYPE Operation against a key holding the wrong kind of value php