簡體   English   中英

從 ServiceStack.Redis 管道讀取值

[英]Read values from ServiceStack.Redis Pipeline

如何從 ServiceStack.Redis 管道中讀取值? 我在GitHub 上看到了示例,但我不確定如果同時有許多 QueueCommands(例如,10000),代碼是否能正常工作。

QueueCommand 的回調似乎是一個異步操作。 每個 QueueCommand 都可以有一個回調。 當 Pipeline.Flush() 被調用時,所有的 QueueCommands 將被發送到 Pipeline Mode 的 Redis Server,當 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 }));
    }

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

是的,當您在 Redis 管道上調用.Flush() ,它會將所有緩沖的命令刷新到 redis,然后執行所有排隊的回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM