C# Redis哈希键出错

C# Redis哈希键出错,c#,c#-4.0,redis,booksleeve,C#,C# 4.0,Redis,Booksleeve,我使用Boolsleve c#创建了一个HaskKey,每次我都提供一个唯一的字段,我的项是Json字符串 public virtual void AddHashSetKey(string item, string hashField) { _redisClient.Hashes.Set(_database, Key, hashField, item); } 添加大约数千个字段后(141988) 我试图检查散列键中的字段数,但下面出现错误。不确定在哪里可以

我使用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]>

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

  • 您是否在正确的数据库中?(
    在redis术语中选择
  • 有没有可能
    C:
    已经有了一个非散列值,因此实际上无法首先设置该值?如果该值不是哈希值,则调用任何哈希命令(包括
    hset
    )都将失败——如果它已经作为字符串存在,也就是说:糟糕的事情
  • 你在检查正确的钥匙吗?(注意钥匙区分大小写)
  • 特别是,我注意到您没有检查错误;由于BookSleeve是完全异步的,所以当您调用
    Set
    时,它不能告诉您服务器端错误;任何错误都将通过
    任务
    API、通过
    等待
    .Wait()
    .Result
    .ContinueWith()
    (或您选择的任何其他
    任务
    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:

中的数据类型。type命令帮助我找出了问题所在。我有名为C:的zset密钥,还有同名的hash,它们以某种方式重叠并发出。我给他们起了不同的名字,结果奏效了。谢谢