StackExchange.Redis: 批量访问多个哈希
StackExchange.Redis: Batch access for multiple hashes
所以我需要批量访问许多不同的哈希(在 StackExchange.Redis 中,我有不同的 RedisKey)。
最好(最快)的方法是什么?
例如,对于这两种可能的实现,哪个是正确的?哪个效果更好?
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();
关于表演:你给他们计时了吗?
除此之外:两者都有效,并且有不同的权衡;后者是同步的,例如 - 从避免 all 的 TPL 开销和复杂性中受益。您可能还想考虑第三个选项 - Lua 脚本接受键数组作为输入并为每个键调用 HGETALL
。
所以我需要批量访问许多不同的哈希(在 StackExchange.Redis 中,我有不同的 RedisKey)。
最好(最快)的方法是什么? 例如,对于这两种可能的实现,哪个是正确的?哪个效果更好?
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();
关于表演:你给他们计时了吗?
除此之外:两者都有效,并且有不同的权衡;后者是同步的,例如 - 从避免 all 的 TPL 开销和复杂性中受益。您可能还想考虑第三个选项 - Lua 脚本接受键数组作为输入并为每个键调用 HGETALL
。