2

所以我需要批量访问许多不同的哈希(在 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();
4

1 回答 1

3

关于表现:你给他们计时了吗?

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

于 2015-02-18T14:08:41.323 回答