发现nodejs高并发场景不能保证数据安全

直接上代码,用redlock同理:

//express_demo.js 文件
var express = require('express');
var app = express();
const Redis = require("ioredis");
const Redlock = require('redlock')
const client = new Redis({
    port: 6379, // Redis port
    host: "127.0.0.1", // Redis host
    family: 4, // 4 (IPv4) or 6 (IPv6)
    password: "123456",
    db: 0,
});
client.set("key2", 0);
app.get('/t', function (req, res) {
    client.del("keyid01")  //低级错误把它放在函数上面
    var setKey = function () {
        client.setnx("keyid01",1, (err, res) => {
            if (res == 0) {  //0未设置成功
                setTimeout(() => { console.log("等待..."); setKey() }, 200)
            } else {
                client.get("key2", (err, res) => {
                    var r2 = parseInt(res) + 1
                    console.log(r2);
                    client.set("key2", r2)
                    client.del("keyid01")
                })        
            }
        })
    }
    setKey()
})
var server = app.listen(8081, function () {

    var host = server.address().address
    var port = server.address().port

    console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

同时开20个线程测试 /t接口
输出:
1
1
2
3
3
...
9
9
9

哪里有问题么?

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题