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: