.net 哈希异常。使用字符串[]删除
当试图通过调用RedisConnection.Hashes.Remove(int-db,string-key,string[]字段,bool-queueJump=false)来删除散列的字段时,我收到一个异常消息:“ERR'hdel'命令的参数数目错误” 下面是生成它的代码:.net 哈希异常。使用字符串[]删除,.net,redis,booksleeve,.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"); co
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();
}
static void Main(字符串[]args)
{
var连接=新的重新连接(“本地主机”);
connection.Open();
var transaction=connection.CreateTransaction();
//将值设置为字段-工作正常!
对于(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();
//这里是抛出异常的地方
删除(0,“s1”,新字符串[]{“f1”,“f2”});
Console.ReadLine();
}
我用的是nuget的Booksleeve 1.3.37.0。
谢谢,来自
历史
=2.4:接受多个字段参数。早于2.4的Redis版本每次调用只能删除一个字段
换句话说,您运行的Redis版本早于2.4,因此每次调用只能删除一个字段。最有可能的是,这将起作用
connection.Hashes.Remove(0, "s1", new string[] { "f1" }).Wait();
connection.Hashes.Remove(0, "s1", new string[] { "f2" }).Wait();
(当然也可能有一个版本的调用不接受数组)来自
历史
=2.4:接受多个字段参数。早于2.4的Redis版本每次调用只能删除一个字段
换句话说,您运行的Redis版本早于2.4,因此每次调用只能删除一个字段。最有可能的是,这将起作用
connection.Hashes.Remove(0, "s1", new string[] { "f1" }).Wait();
connection.Hashes.Remove(0, "s1", new string[] { "f2" }).Wait();
(当然也可能有一个版本的调用不需要数组)BookSleeve会执行版本测试,试图向您隐藏这些微妙之处;问题似乎出在版本测试本身:
/// <summary>
/// Does HDEL support varadic usage?
/// </summary>
public bool HashVaradicDelete { get { return version > v2_2_0; } }
//
///HDEL支持varadic使用吗?
///
公共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支持varadic使用吗?
///
public bool HashVaradicDelete{get{return version>=v2_4_0;}
阅读HDEL
底部的评论,页面似乎在某个时候没有很清楚地列出版本-我可能从评论中得到了版本测试:
当前的官方稳定版本(2.2)不支持多个字段;我只是跟踪了一会儿,试图让它工作,直到我意识到这个页面是2.4的文档,而不是2.2
我很高兴将其更改为>=2.4-但您能确切确认您使用的服务器版本吗?BookSleeve确实执行版本测试,试图向您隐藏这些细微之处;问题似乎出在版本测试本身:
/// <summary>
/// Does HDEL support varadic usage?
/// </summary>
public bool HashVaradicDelete { get { return version > v2_2_0; } }
//
///HDEL支持varadic使用吗?
///
公共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支持varadic使用吗?
///
public bool HashVaradicDelete{get{return version>=v2_4_0;}
阅读HDEL
底部的评论,页面似乎在某个时候没有很清楚地列出版本-我可能从评论中得到了版本测试:
当前的官方稳定版本(2.2)不支持多个字段;我只是跟踪了一会儿,试图让它工作,直到我意识到这个页面是2.4的文档,而不是2.2
我很高兴将其更改为>=2.4-但您能确切确认您使用的服务器版本吗?Hmmm。。。。这很奇怪;这里的代码实际上包括一个版本检测测试,以确保使用正确的(varadic/非varadic)版本。你能准确地指出你使用的服务器版本吗,这样我就可以试着重新编程了。。。。这很奇怪;这里的代码实际上包括一个版本检测测试,以确保使用正确的(varadic/非varadic)版本。你能准确地指出你使用的服务器版本吗?这样我就可以尝试重新编程了?+1用于加快而不是破坏API的版本检查:)@JoachimIsaksson这可能会出现,部分原因是长期以来我们落后于几个版本,我希望它“正常工作”,但随着我们的升级,它会悄悄地变得更快。
TakeLock
是这方面的另一个很好的例子——它的实现在版本+1之间发生了根本性的变化,版本检查只是加快了速度,而不是破坏了API:)@JoachimIsaksson可能会出现这种情况,部分原因是长期以来我们落后于几个版本——我希望它“正常工作”但在升级过程中,我们会悄悄地加快速度。TakeLock
是另一个很好的例子,它的实现在不同版本之间发生了根本性的变化