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

时间:2017-12-19 04:08:30

标签: python python-3.x redis

当我像这样将对象存储到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字符串与第一个示例中的字符串相同时,为什么第二个示例会出错?

1 个答案:

答案 0 :(得分:1)

我无法复制您的问题。也许您要混合使用字符串和哈希方法?这是我的环境:

  • Python 3.6.5
  • Redis稳定版5.0.5

我使用了您的确切代码,但我在上面添加了以下代码:

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中设置键和值的示例:

  • 如果值的类型为字符串-> 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