您好我正在使用Laravel和Redis。当我尝试通过get方法访问密钥时,会出现以下错误“WRONGTYPE对一个持有错误值的键的操作”
我使用以下代码来访问键值 -
我使用此代码从redis获取数据
$values = "l_messages";
$value = $redis->HGETALL($values);
print($value);
答案 0 :(得分:175)
Redis支持5种类型的数据。您需要知道键映射到的值的类型,对于每种数据类型,检索它的命令是不同的。
以下是检索键值的命令:
<key>
<key>
<key> <start> <end>
<key>
<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。