【问题标题】:StackExchange.Redis: Batch access for multiple hashesStackExchange.Redis:批量访问多个哈希
【发布时间】:2015-02-17 22:29:52
【问题描述】:

所以我需要批量访问许多不同的哈希(在 StackExchange.Redis 中,我有不同的 RedisKey)。

最好(最快)的方法是什么? 例如,对于这两种可能的实现,是否正确?哪一种效果更好?

  1.         List<Task<HashEntry[]>> list = new List<Task<HashEntry[]>>();
            List<RedisKey> keys; //Previously initialized list of keys
            foreach (var key in keys)
            {
                var task = db.HashGetAllAsync(key);
                list.Add(task);
            }
            await Task.WhenAll(list);
    

2.

            List<Task<HashEntry[]>> list = new List<Task<HashEntry[]>>();
            List<RedisKey> keys; //Previously initialized list of keys
            IBatch batch = db.CreateBatch();
            foreach (var key in keys)
            {
                var task = batch.HashGetAllAsync(key);
                list.Add(task);
            }
            batch.Execute();

【问题讨论】:

    标签: redis pipeline stackexchange.redis batching


    【解决方案1】:

    关于性能:你给他们计时了吗?

    除此之外:两者都有效,并且有不同的权衡;例如,后者是同步的 - 从避免 所有 TPL 开销和复杂性中获得一点好处。您可能还需要考虑第三种选择 - 一个 Lua 脚本,它接受键数组作为输入并为每个键调用 HGETALL

    【讨论】:

    • 你好。我尝试了其中三个......奇怪的是(对我来说)获胜者(有时是很大的优势)是“流水线”(多次调用 HashGetAllAsync 并等待)。我说奇怪,因为在互联网上阅读,Lua 似乎是一个更好的解决方案。也许我使用了一个糟糕的脚本?我正在使用与此处发布的 link 类似的脚本。
    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多