node.js - redis select 插入出错
PHP中文网
PHP中文网 2017-04-17 13:45:26
[Node.js讨论组]

初学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);
}

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
怪我咯

试试

var request = require("request");

for(let i = 0;i<10;i++){
    (function(i){
        request.post({
            url:'http://127.0.0.1:3001/',
            json:{'id':i}
        });
    })(i);
}
ringa_lee

node 和 redis 的关系是异步的, 第一次select的回调触发时,redis都已经将10条命令执行完了。 redis最后执行的是 select(9), 所以第一次到第十次的set操作都写进 db9了.
使用 Pipelining 或者 Transaction 都行。
用法看文档吧,https://github.com/luin/ioredis。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号