Redis HashKey выдает ошибку

Я создал HaskKey с помощью Boolsleve C#, каждый раз я предоставляю уникальное поле, и мой элемент - строка Json.

   public virtual void AddHashSetKey(string item, string hashField)
    {
        _redisClient.Hashes.Set(_database, Key, hashField, item);
    }

После добавления около тысячи полей (141988) я пытаюсь проверить количество полей в хеш-ключе, но получаю ошибку ниже. Не уверен, где я могу найти более подробную информацию или почему я получаю эту ошибку?

redis 127.0.0.1:6379[1]> Exists C:
(integer) 1
redis 127.0.0.1:6379[1]> HLEN C:
(error) ERR Operation against a key holding the wrong kind of value
redis 127.0.0.1:6379[1]>

1 ответ

Решение

Ну, я посмотрел на месте, и он отлично работает. Основные мысли у меня есть:

  • ты в правильной базе данных? (select в редис сроках)
  • возможно ли, что C: уже имел не-хеш-значение, и, следовательно, значение не может быть установлено в первую очередь? Вызов любой хэш-команды (включая hset) потерпит неудачу, если значение не является хешем - поэтому, если оно уже существует в виде строки: плохие вещи
  • вы проверяете правильный ключ? (отмечая, что ключи чувствительны к регистру)
  • в частности, я замечаю, что вы не проверены на наличие ошибок; поскольку BookSleeve полностью асинхронный, он не может сообщить вам об ошибках на стороне сервера при вызове Set; любая ошибка будет выявлена ​​(когда она появится) через Task API, через любой из await, .Wait(), .Result или же .ContinueWith() (или любой другой Task API на ваш выбор)

Но локально

redis 127.0.0.1:6379[1]> exists C:
(integer) 1
redis 127.0.0.1:6379[1]> hlen C:
(integer) 1
redis 127.0.0.1:6379[1]> hgetall C:
1) "someField"
2) "{foo:'bar'}"

Вы также можете попробовать:

redis 127.0.0.1:6379[1]> type C:
hash

который говорит вам, какой тип данных хранится в C:

Другие вопросы по тегам