Redis:对多个哈希的批访问
所以我需要批量访问许多不同的散列(在StackExchange.Redis中,我有不同的RedisKey) 最好(最快)的方法是什么? 例如,对于这两种可能的实现,是否正确?哪一个更好Redis:对多个哈希的批访问,redis,pipeline,stackexchange.redis,batching,Redis,Pipeline,Stackexchange.redis,Batching,所以我需要批量访问许多不同的散列(在StackExchange.Redis中,我有不同的RedisKey) 最好(最快)的方法是什么? 例如,对于这两种可能的实现,是否正确?哪一个更好 List List=新列表(); 列出键//先前初始化的密钥列表 foreach(var键入键) { var task=db.HashGetAllAsync(键); 列表。添加(任务); } 等待任务。WhenAll(列表); 二, List List=新列表(); 列出键//先前初始化的密钥列表 IBatch
List List=新列表();
列出键//先前初始化的密钥列表
foreach(var键入键)
{
var task=db.HashGetAllAsync(键);
列表。添加(任务);
}
等待任务。WhenAll(列表);
List List=新列表();
列出键//先前初始化的密钥列表
IBatch batch=db.CreateBatch();
foreach(var键入键)
{
var task=batch.HashGetAllAsync(键);
列表。添加(任务);
}
batch.Execute();
关于性能:您对它们进行计时了吗
除此之外:两者都起作用,并且有不同的权衡;后者是同步的,例如,bit从避免所有TPL开销和复杂性中获益。您可能还需要考虑一个第三选项——一个接受并排列关键字作为输入的Lua脚本,并调用每个代码<代码> HGETALLU/CODE>。我试过他们三个。。。奇怪的是(对我来说)赢家(有时是大幅度的)是“流水线”(多次调用HashGetAllAsync并等待)。我说得很奇怪,因为在互联网上阅读,Lua似乎是一个更好的解决方案。也许我使用了一个糟糕的脚本?我使用的脚本与这里发布的脚本类似。
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);
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();