Node.js 和 Redis:
我有一个 LIST (users:waiting) 存储等待加入游戏的用户队列。
我有 SORTED SET(游戏:等待)等待用户的游戏。服务器每 30 秒更新一次新日期。这样我可以确保如果服务器崩溃,游戏将不再使用。如果服务器正在运行并填满,它将从排序集中删除自己。
每个游戏都有一个包含其中用户的 SET (game:id:users)。每场比赛最多可容纳 6 名玩家。
多个服务器正在使用 BRPOP 从 LIST 中提取用户(用户:等待)。
一旦服务器有了用户 id,它就会获取等待的游戏 id,然后继续在他们的 game:id:users SET 上运行 SCARD。如果此结果小于 6,则将它们添加到集合中。
问题:
如果多台服务器同时执行此操作,我们最终可能会一次将超过 6 个用户添加到一个集合中。例如,如果一个服务器请求 SCARD,而另一个服务器立即运行 SADD,则集合中的数量将会增加,但第一个服务器不会知道。
有没有办法阻止这种情况?