Node_redis benchmark test, it shows that incr has more than 100000 op / s
$ node multi_bench.js Client count: 5, node version: 0.10.15, server version: 2.6.4, parser: hiredis INCR, 1/5 min/max/avg/p95: 0/ 2/ 0.06/ 1.00 1233ms total, 16220.60 ops/sec INCR, 50/5 min/max/avg/p95: 0/ 4/ 1.61/ 3.00 648ms total, 30864.20 ops/sec INCR, 200/5 min/max/avg/p95: 0/ 14/ 5.28/ 9.00 529ms total, 37807.18 ops/sec INCR, 20000/5 min/max/avg/p95: 42/ 508/ 302.22/ 467.00 519ms total, 38535.65 ops/sec
Then I add redis to nodejs with http server
var http = require("http"), server, redis_client = require("redis").createClient(); server = http.createServer(function (request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); redis_client.incr("requests", function (err, reply) { response.write(reply+'\n'); response.end(); }); }).listen(6666); server.on('error', function(err){ console.log(err); process.exit(1); });
Use ab command for testing, it has only 6000 req / s
$ ab -n 10000 -c 100 localhost:6666/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Server Hostname: localhost Server Port: 6666 Document Path: / Document Length: 7 bytes Concurrency Level: 100 Time taken for tests: 1.667 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1080000 bytes HTML transferred: 70000 bytes Requests per second: 6000.38 [
The latest hello world test, it reached 7k req / s
Requests per second: 7201.18 [#/sec] (mean)
How to profile and find out the reason why redis in http loses performance?