WRONGTYPE Operacja na kluczu przechowującym niewłaściwy rodzaj wartości php

160

Cześć, używam Laravel z Redisem. Kiedy próbuję uzyskać dostęp do klucza metodą get, a następnie otrzymuję następujący błąd „Operacja WRONGTYPE przeciwko kluczowi zawierającemu niewłaściwy rodzaj wartości”

Używam następującego kodu, aby uzyskać dostęp do wartości klucza -

używam tego kodu do pobierania danych z Redis

$values = "l_messages";
$value = $redis->HGETALL($values);
print($value);
Trushar Narodia
źródło

Odpowiedzi:

406

Redis obsługuje 5 typów danych. Musisz wiedzieć, na jaki typ wartości mapowany jest klucz, ponieważ dla każdego typu danych polecenie ich pobrania jest inne.

Oto polecenia umożliwiające pobranie wartości klucza:

  • jeśli wartość jest typu string -> GET <key>
  • jeśli wartość jest typu hash -> HGETALL <key>
  • jeśli wartość jest typu list -> lrange <key> <start> <end>
  • jeśli wartość jest typu set -> smembers <key>
  • jeśli wartość jest typu posortowane zestawy -> ZRANGEBYSCORE <key> <min> <max>

Użyj TYPEpolecenia, aby sprawdzić typ wartości, na którą mapuje klucz:

  • rodzaj <key>
Phoebe Li
źródło
2
Uratowałeś dzień :-)
Zin Minn
1
Więc kiedy używasz metod, które bezpośrednio zapisują / odczytują bajt [], która z nich jest używana?
João Pedro 'jota' Martins
8

Ten błąd oznacza, że ​​wartość indeksowana przez klucz „l_messages” nie jest typu hash, ale raczej jest czymś innym. Prawdopodobnie ustawiłeś tę inną wartość wcześniej w kodzie. Wypróbuj różne inne polecenia pobierające wartość, zaczynając od GET, aby zobaczyć, które z nich działa i będziesz wiedzieć, jaki typ jest tutaj.

zaliczka512
źródło
8
Właściwie print($redis->TYPE($values));opowiem ci to bez domysłów;)
Itamar Haber
1
Świetnie :) Nie znałam tego polecenia, nigdy nie musiałem go używać. Oto dokumentacja: redis.io/commands/type
zaliczka512
0

Napotkałem ten problem, próbując ustawić coś na redis. Problem polegał na tym, że wcześniej użyłem metody „set” do ustawiania danych z określonym kluczem, np

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

Później zdecydowałem się przejść na metodę „hSet” i próbowałem to w ten sposób

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

Wtedy otrzymałem wspomniany błąd. Musiałem więc przejść do redis-cli i ręcznie usunąć wpis „osoby” za pomocą

del persons

Po prostu nie mógł zapisać innej struktury danych pod istniejącym kluczem, więc musiałem wtedy usunąć wpis i hSet.

Gishas
źródło