Node.js 为什么redis基准测试性能与real app基准测试不同
上述基准测试提供每秒19k的请求 但我的Nodejs对“set”命令的基准测试每秒仅提供10k请求 那么为什么redis基准测试每秒有19k请求,而我的nodejs应用每秒有10k请求呢?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”,
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")
}
}
}