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
Node.js 为什么redis基准测试性能与real app基准测试不同_Node.js_Redis_Benchmarking_Ioredis - Fatal编程技术网

Node.js 为什么redis基准测试性能与real app基准测试不同

Node.js 为什么redis基准测试性能与real app基准测试不同,node.js,redis,benchmarking,ioredis,Node.js,Redis,Benchmarking,Ioredis,上述基准测试提供每秒19k的请求 但我的Nodejs对“set”命令的基准测试每秒仅提供10k请求 那么为什么redis基准测试每秒有19k请求,而我的nodejs应用每秒有10k请求呢? redis-benchmark -n 1000000 -t set -q -c 1 const Redis=require(“ioredis”); 常数{ 演出 }=需要(“性能挂钩”); //准备好Redis客户端A const redisclient=new Redis({主机:“127.0.0.1”,

上述基准测试提供每秒19k的请求

但我的Nodejs对“set”命令的基准测试每秒仅提供10k请求

那么为什么redis基准测试每秒有19k请求,而我的nodejs应用每秒有10k请求呢?

redis-benchmark -n 1000000 -t set -q -c 1
const Redis=require(“ioredis”);
常数{
演出
}=需要(“性能挂钩”);
//准备好Redis客户端A
const redisclient=new Redis({主机:“127.0.0.1”,端口:6379});
//称我们的基准测试为
基准管理();
//我们的基准功能
异步函数基准测试(){
//睡眠异步函数
功能睡眠(ms){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
常数循环数=10000;
让processedTasks=0;
const WholeTime=performance.now();
for(设i=0;i
节点将有一些开销,而基准测试工具可能没有。您是基准测试Redis还是基准测试代码?Node永远不会像C那么快,但它可以接近C。看到一半的速度并不奇怪。谢谢你的投入。我之所以对Redis进行基准测试,是因为我想知道Redis服务器每秒可以处理多少请求。那么我能相信“redis基准”吗?这意味着基准测试工具提供了关于redis服务器每秒可以处理多少请求的正确信息?因为我的nodejs给出了大约一半的请求,所以如果我将另一个nodejs进程指向redis,那么这两个combine服务器将每秒给出19k个请求?我主要关心的是redis服务器。您是否尝试过同时运行多个测试工具副本<带有
-P
选项的code>xargs对于这类事情很方便。您可能需要测试一些东西,而不是将同一个命令敲上十亿次。现实世界中的情况通常非常奇怪。是的,因为我的基准测试函数是异步的,所以我称它为2次,并行运行。它没有任何效果。至于-P,它是一个管道,可以立即发送批量命令。这是没有用的,因为我试图知道redis服务器每秒可以处理多少简单调用的请求。对我来说,知道redis服务器的容量非常重要,这样我就能够知道何时需要扩展redis。再次感谢你的帮助。使用第三方软件或我的简单nodejs基准测试代码为真实情况下的redis服务器进行基准测试的可靠方法,与redis基准测试工具相比,性能只有一半。
const Redis = require("ioredis");
const {
    performance
} = require('perf_hooks');

// Ready the Redis client A
const RedisAClient = new Redis({ host: "127.0.0.1", port: 6379 });

// Call our benchmarking
Benchmarking();


// Our benchmarking function
async function Benchmarking() {

    // Sleep async function
    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }


    const loopNumbers = 10000;
    let processedTasks = 0;
    const WholeTime = performance.now();

    for (let i = 0; i < loopNumbers; i++) {

        // Call redis for set command
         RedisAClient.set("testing", i, function (err, reply) {

            processedTasks++;
        });

        // If it is last loop then log the benchmark
        if (i == loopNumbers - 1) {

            // Wait for the all tasks to complete
            while (processedTasks != (loopNumbers)) { await sleep(1); }

            console.log((performance.now() - WholeTime) + "ms")

        }

    }

}