source

잘못된 종류의 값을 보유한 키에 대한 WORLTYPE 작업 php

manysource 2022. 11. 13. 19:33

잘못된 종류의 값을 보유한 키에 대한 WORLTYPE 작업 php

안녕, 나는 레디스랑 라라벨을 사용하고 있어.get 메서드로 키에 액세스하려고 하면 "WRONGTYPE Operation against a key holding a value" (잘못된 종류의 값을 유지하는 키에 대한 WRONGTYPE 조작)이라는 오류가 나타납니다.

키 값에 액세스하기 위해 다음 코드를 사용하고 있습니다.

이 코드를 사용하여 redis에서 데이터를 가져옵니다.

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

Redis는 6가지 데이터 유형을 지원합니다.각 데이터 유형에 따라 키를 가져오는 명령어가 다른 값의 유형을 알아야 합니다.

키 값을 취득하는 명령어는 다음과 같습니다.

  • type string인 -> GET -> GET 입니다.<key>
  • hash -> 해시 -> HGETALL<key>
  • 목록인 -> "-" "-" lrange "-> lrange"<key> <start> <end>
  • -> > smembers > smember<key>
  • 세트 -> -> ZRANGEBYCORE<key> <min> <max>
  • -> count 유형인 -> count " " " > xread count " 입니다.<count> '''」<key> <ID>. https://redis.io/commands/xread

명령어를 사용하여 키가 매핑되는 값의 유형을 확인합니다.

  • 「」라고 입력합니다.<key>

는 키 에 의해 이 "l_messages" 유형이 합니다.hash츠미야코드 앞부분에서 다른 값으로 설정했을 수 있습니다.GET부터 시작하는 다양한 value-getter 명령을 사용하여 어떤 명령어가 작동하는지 확인하면 실제로 어떤 유형이 있는지 알 수 있습니다.

이 에러는, 잘못된 값을 키에 삽입하려고 하고 있는 것을 나타냅니다.즉, 같은 키가 존재하지만, 데이터 구조가 다른 것을 의미합니다.

모든 키를 가져오려면 redis CLI에서 다음을 수행합니다.

keys *

모든 키가 표시됩니다.키에 저장되어 있는 값의 유형을 확인하려면 다음 작업을 수행합니다.

type <key>

열쇠에 어떤 가치를 넣을 수 있는지 알 수 있습니다.내 경우 유형은 string(세트 사용)이며, 키를 목록으로 사용하려고 했습니다.

나는 무언가를 리디스로 설정하려고 할 때 이 문제에 직면했다.문제는 이전에 특정 키로 데이터를 설정하기 위해 "set" 방식을 사용했다는 것입니다.

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

나중에 'hSet' 방식으로 바꾸기로 하고 이렇게 해보았습니다.

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

그리고 앞서 말한 오류가 발생했습니다.그래서 저는 redis-cli로 이동하여 수동으로 "person" 엔트리를 삭제해야 했습니다.

del persons

기존 키로는 다른 데이터 구조를 쓸 수 없기 때문에 엔트리와 hSet을 삭제해야 했습니다.

잘못된 데이터베이스 인덱스

DB 번호가 잘못되어 있을 수 있습니다.같은 문제가 있어서 db를 올바른 것으로 변경했는데, 문제없이 작동했어요!HGETALL이나 원하는 것을 선택하기 전에 올바른 db를 선택하거나 적어도 어떤 db에 속해 있는지 고려해 보는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/37953019/wrongtype-operation-against-a-key-holding-the-wrong-kind-of-value-php