Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis:对多个哈希的批访问_Redis_Pipeline_Stackexchange.redis_Batching - Fatal编程技术网

Redis:对多个哈希的批访问

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

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

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

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