StackExchange.Redis: Batch access for multiple has

2019-05-31 10:44发布

So I need to access in bulk many different hashes (in StackExchange.Redis, I have different RedisKey's).

What is the best (fastest) way to do it? For example, for these two possible implementations, is either correct? Which one works better?

  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();

1条回答
家丑人穷心不美
2楼-- · 2019-05-31 11:16

On performance: have you timed them?

Other than that: both work, and have different trade-offs; the latter is synchronous, for example - bit benefits from avoiding all of the TPL overheads and complications. You might also want to consider a third option - a Lua script that accepts and array of keys as input and invokes HGETALL for each.

查看更多
登录 后发表回答