当尝试通过调用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。 谢谢,
答案 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 - 但是您能确切地确认您使用的是哪种服务器版本吗?