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

nar*_*har 99 php redis

嗨我正在使用Laravel和Redis.当我尝试通过get方法访问密钥时,然后得到以下错误"WRONGTYPE对一个持有错误值的键的操作"

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

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

$values = "l_messages";
$value = $redis->HGETALL($values);
print($value);
Run Code Online (Sandbox Code Playgroud)

Pho*_* Li 244

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

以下是检索键值的命令:

  • 如果value的类型为string - > GET <key>
  • 如果值的类型为hash - > HGETALL <key>
  • 如果value是类型列表 - > lrange <key> <start> <end>
  • 如果value是类型集 - > smembers <key>
  • 如果value是sort的类型 - > ZRANGEBYSCORE <key> <min> <max>

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

  • 类型 <key>

  • 你拯救了这一天:-) (7认同)
  • @alramdein,您可以使用 HGET 并指定“存储在 key 的哈希中的字段”。'HGET &lt;key&gt; &lt;field&gt;' 或 HGETALL 查看所有字段 (3认同)

小智 25

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

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

keys *
Run Code Online (Sandbox Code Playgroud)

这应该显示所有键现在要获取键存储的值的类型,请执行以下操作

type <key>
Run Code Online (Sandbox Code Playgroud)

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


adv*_*512 7

此错误意味着由键"l_messages"索引的值不是类型hash,而是其他类型.您可能已在代码中将其设置为其他值.尝试从GET开始的各种其他value-getter命令,看看哪个有效,你就会知道这里有什么类型.

  • 实际上,`print($ redis-> TYPE($ values));`会在没有猜测的情况下告诉你;) (8认同)