Hash上的异常。使用string []移动

时间:2013-05-27 16:05:43

标签: .net redis booksleeve

当尝试通过调用RedisConnection.Hashes.Remove(int db,string key,string []字段,bool queueJump = false)来删除哈希的字段时,我得到一个异常说:“ERR错误的'hdel'命令参数数量”

以下是产生它的代码:

    static void Main(string[] args)
    {
        var connection = new RedisConnection("localhost");
        connection.Open();

        var transaction = connection.CreateTransaction();

        // setting values to fields - works fine!
        for (int index = 0; index < 2; index++)
        {
            transaction.Hashes.Set(0, "s1", String.Format("f{0}", index.ToString()), String.Format("v{0}", index.ToString()));
        }
        transaction.Execute().Wait();

        // Here is where the exception is being thrown
        connection.Hashes.Remove(0, "s1", new string[] { "f1", "f2" }).Wait();

        Console.ReadLine();
    }

我正在使用来自nuget的Booksleeve 1.3.37.0。 谢谢,

2 个答案:

答案 0 :(得分:3)

来自HDEL manual;

  

历史

     

= 2.4:接受多个字段参数。早于2.4的Redis版本只能删除每个呼叫的字段。

换句话说,您运行的是早于2.4的Redis版本,因此每次调用只能删除一个字段。最有可能的是,这将有效;

connection.Hashes.Remove(0, "s1", new string[] { "f1" }).Wait();
connection.Hashes.Remove(0, "s1", new string[] { "f2" }).Wait();

(或者当然可能有一个不接受数组的调用版本)

答案 1 :(得分:1)

BookSleeve会执行版本测试,试图隐藏这些微妙之处;似乎问题出在版本测试本身:

    /// <summary>
    /// Does HDEL support varadic usage?
    /// </summary>
    public bool HashVaradicDelete { get { return version > v2_2_0; } }

我想应该是:

    /// <summary>
    /// Does HDEL support varadic usage?
    /// </summary>
    public bool HashVaradicDelete { get { return version >= v2_4_0; } }

阅读HDEL底部的评论,似乎该页面在某些时候没有非常清楚地列出版本 - 我可能从评论中得到了我的版本测试:

  

目前的官方稳定版本(2.2)不支持多个字段;我只是把我的尾巴追了一会儿试图让它工作,直到我意识到这个页面是2.4的文档,而不是2.2

我很高兴将其更改为&gt; = 2.4 - 但是您能确切地确认您使用的是哪种服务器版本吗?