我正在用Redis服务器进行负载测试。我想在redis中测试INCR
操作,我将计数器初始化为1
(通过设置一个名为total calls的键),然后对于每个传入的请求,我将计数器增加1。因此在3000个请求之后,计数器应该是3000,在8000个请求之后,计数器必须是8000
为此,我创建了一个运行express的简单NodeJS
脚本和一个增加计数器的简单中间件。我用了loadtest
用于负载测试。当没有并发性时,一切都正常工作,但当I增加并发性时,结果会出现1
、3
或5
的差异。我不明白为什么会这样
对于并发性为1且请求数为3000的输入测试:
loadtest -n 3000 -c 1 http://localhost:3000
redis get total-calls
命令给出3000
的预期结果
但是如果我将并发性增加到5,并在从redis中删除前一个键之后运行相同的命令,那么我得到的总计数是3001。为什么会发生这种情况
loadtest -n 3000 -c 5 http://localhost:3000
当请求数进一步增加到8000个时,总数变成了8003个。我不明白这是为什么
被loadtest命中的代码:
const express = require('express');
const app = express();
const Redis = require("./redis-wrapper");
const client = new Redis();
const maxCallsAllowed = 50000
const requestCounter = async (req, resp, next) => {
// Increment the request counter
const redis = client.redis;
if(await redis.exists("total-calls") === 1) {
// Key already exists
// Increment the key
await redis.incr("total-calls")
}else {
// Key does not exist
// Set the key
await redis.set("total-calls", 1)
}
next();
}
app.get('/', requestCounter, (req, resp, next) => {
resp.json({
status: 'ok'
})
});
app.listen(3000);
有什么我不知道的吗?为什么计数大于请求数?我也用locust.io进行了测试,但注意到了相同的行为
目前没有回答
相关问题 更多 >
编程相关推荐