初学redis,写了个小demo,预想目标:db0-db9每个插入一条数据,现实情况是全部都插入到db9了,请帮忙看下,谢谢。
app.js提供服务:
var express = require("express");
var bodyParser = require('body-parser');
var redis = require("redis");
var client = redis.createClient("6379","192.168.205.161");
var app = express();
app.use(bodyParser());
app.post("/",function(req,res){
client.SELECT(req.body.id,function(){
client.HMSET(req.body.id,req.body,function(err){
if(err){
console.log("插入失败");
return false;
}
console.log("插入成功");
client.EXPIRE(req.body.id,86400);
});
})
});
app.listen("3001");
利用request模块模拟post请求
var request = require("request");
for(var i = 0;i<10;i++){
(function(i){
request.post({
url:'http://127.0.0.1:3001/',
json:{'id':i}
});
})(i);
}

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
试试
node 和 redis 的关系是异步的, 第一次select的回调触发时,redis都已经将10条命令执行完了。 redis最后执行的是 select(9), 所以第一次到第十次的set操作都写进 db9了.
使用 Pipelining 或者 Transaction 都行。
用法看文档吧,https://github.com/luin/ioredis。