小弟剛接觸 Redis,對 Sorted Set 的機制有點不太清楚
因為先前看到有文章說可以用下面的方法來實現 Redis 商品秒殺問題:
我這邊也嘗試用 Node.js 的 Redis 來呈現步驟 2、3 的邏輯,但都會有超賣的結果,想詢問如何修正呢?
const redis = require("redis");
var client = redis.createClient();
client.on("error", function (error) {
console.error(error);
});
const max = 20;//最大筆數(商品庫存)
function add () {
client.watch("item", function (err) {
if (err) throw err;
client.zcard('item', function (err, reply) {
if (err) throw err;
if (reply < max) {
client.multi().
zadd("item", new Date().getTime(), JSON.stringify({ "guid": "GG", "time": new Date().getTime() })).
exec(function (err, results) {
if (err) throw err;
console.log(results);
});
}
});
});
}
function main () {
for (var i = 0; i < 999; i++) {
add();
}
}
main();