【问题标题】:Redis HashKey erroring outRedis HashKey 出错
【发布时间】:2013-09-03 15:20:29
【问题描述】:

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

【问题讨论】:

    标签: c# c#-4.0 redis booksleeve


    【解决方案1】:

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

    • 您在正确的数据库中吗? (select redis 术语)
    • 是否有可能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: 存储的数据类型

    【讨论】:

    • type 命令帮助我找出问题所在。我有 C: 名称的 zset 密钥以及具有相同名称的哈希,它们以某种方式重叠并被发布。我给了他们不同的名字,它奏效了。谢谢
    猜你喜欢
    • 2020-07-11
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多