Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 哈希异常。使用字符串[]删除_.net_Redis_Booksleeve - Fatal编程技术网

.net 哈希异常。使用字符串[]删除

.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

当试图通过调用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();
    }
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
是另一个很好的例子,它的实现在不同版本之间发生了根本性的变化