WRONGTYPE对一个持有错误的值php的键的操作

时间:2016-06-21 19:28:14

标签: php redis

您好我正在使用Laravel和Redis。当我尝试通过get方法访问密钥时,会出现以下错误“WRONGTYPE对一个持有错误值的键的操作”

我使用以下代码来访问键值 -

我使用此代码从redis获取数据

$values = "l_messages";
$value = $redis->HGETALL($values);
print($value);

4 个答案:

答案 0 :(得分:175)

Redis支持5种类型的数据。您需要知道键映射到的值的类型,对于每种数据类型,检索它的命令是不同的。

以下是检索键值的命令:

  • 如果value的类型为string - &gt;获取<key>
  • 如果值的类型为hash - &gt; HGETALL <key>
  • 如果值是类型列表 - &gt; lrange <key> <start> <end>
  • 如果值是类型集 - >;涂抹<key>
  • 如果值的类型为排序集 - > ZRANGEBYSCORE <key> <min> <max>

命令检查键映射到的值的类型:

  • 输入<key>

答案 1 :(得分:7)

此错误表示由键&#34; l_messages&#34;索引的值。不是hash类型,而是其他类型。您可能已在代码中将其设置为其他值。尝试各种其他的值获取器命令,从GET开始,查看哪一个有效,并且您将知道实际上是什么类型。

答案 2 :(得分:3)

此错误表示您试图将错误的值推送到键中,这意味着已经存在相同的键但具有不同的数据结构。

要获取所有密钥,请在 redis cli 中执行此操作

keys *

这应该显示所有的键 现在要获取密钥存储的值的类型,请执行

type <key>

所以它说明了您可以将什么值推入密钥。 在我的情况下,类型是字符串(使用 set),我试图将键用作列表

答案 3 :(得分:0)

在尝试设置Redis时遇到了这个问题。问题是我以前使用“设置”方法来设置具有特定键的数据,例如

$redis->set('persons', $persons)

后来我决定更改为“ hSet”方法,并以此方式进行了尝试

foreach($persons as $person){
    $redis->hSet('persons', $person->id, $person);
}

然后我得到了上述错误。因此,我要做的是转到redis-cli并使用

手动删除“人员”条目
del persons

它根本无法在现有密钥下写入不同的数据结构,因此我不得不删除该条目,然后删除hSet。