1

我使用 Boolsleve c# 创建了一个 HaskKey,我每次都提供一个唯一字段,我的项目是 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]>
4

1 回答 1

0

嗯,我在本地看过,效果很好。我的主要想法:

  • 你在正确的数据库中吗?(select在redis方面)
  • 是否可能C: 已经有一个非散列值,因此实际上无法首先设置该值?如果值不是散列,则调用任何散列命令(包括hset)都会失败 - 所以如果它已经作为字符串存在:坏事
  • 你在检查正确的钥匙吗?(注意键是区分大小写的)
  • 特别是,我注意到没有检查您是否有错误;由于 BookSleeve 是完全异步的,它不能在您调用Set;时告诉您服务器端错误。任何错误都将通过TaskAPI、通过任何一个、、await或(或您选择的任何其他API)暴露(当它到达时).Wait().Result.ContinueWith()Task

但是在本地:

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:

于 2013-09-03T07:20:29.140 回答