直接上代码,用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
哪里有问题么?