从ServiceStack.Redis Pipeline读取值

时间:2016-04-27 06:50:24

标签: c# redis servicestack.redis

如何从ServiceStack.Redis管道读取值?我在GitHub上看到了一些例子,但如果同时有很多QueueCommands,我不确定代码是否能正常工作(比方说,例如10000)。

QueueCommand的回调似乎是一个异步操作。每个QueueCommand都可以有一个回调。当调用Pipeline.Flush()时,所有QueueCommands都将以管道模式发送到Redis服务器,当其中一个QueueCommands被执行时,将调用其回调。

我的问题是:当Pipeline.Flush()完成时,库是否保证所有回调都被执行?

以下是GitHub上的代码ServiceStack.Redis

    [Test]
    public void Can_call_single_operation_with_callback_3_Times_in_pipeline()
    {
        var results = new List<long>();
        Assert.That(Redis.GetValue(Key), Is.Null);
        using (var pipeline = Redis.CreatePipeline())
        {
            pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
            pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
            pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
            //Can I assume that when Flush() finishes, 
            //all 3 callbacks (results.Add) would have finished?
            pipeline.Flush();
        }

        Assert.That(Redis.GetValue(Key), Is.EqualTo("3"));
        Assert.That(results, Is.EquivalentTo(new List<long> { 1, 2, 3 }));
    }

1 个答案:

答案 0 :(得分:1)

您可以在以下位置找到Redis Pipeline API的一些测试:

是的,当您在Redis管道上调用.Flush()时,flushes all the buffered commands to redis会执行所有排队的回调。