【问题标题】:Get random element from redis set without duplicate从redis集中获取随机元素而不重复
【发布时间】:2014-08-25 02:31:27
【问题描述】:

我正在使用 REDIS 和 Socket.io 在 Node.js 上制作游戏。

我在这个游戏中有“房间”。房间里有 1 到 9 名玩家。他们可以随时加入和离开。

房间中还有一个循环 (setInterval),它从 Redis 中取出一名玩家并使该玩家成为“领导者”。

按设置存储在 Redis 中的玩家 (rooms:ROOMID:online)。当用户加入房间时,我将他添加到这个集合中。当用户离开时,我将他从集合中移除。

也许这是一个愚蠢的问题,但是......

在我手动停止循环之前,如何在每次迭代中获取下一个用户而不重复,考虑到循环的每次迭代都可能发生变化(可以变小或变大,用户可以加入和离开)。

我想要的示例:集合中有 3 个用户 (0, 1, 2)

setInterval(function, 1000);

>0
>1
>2
> User 3 joined the room (added to set)
>0
>1
>2
>3
>0
>1
>2
> User 2 left the room (removed from set)
>3
>0
>1
>3
>...etc

注意:我无法从我的主要系列(房间:ROOMID:在线)中 SPOP。

对不起,我的英语不好,感谢您的帮助。

【问题讨论】:

    标签: javascript arrays node.js redis


    【解决方案1】:

    我建议你保留另一套,例如rooms:ROOMID:elected。使其与每个加入/同步事件上设置的rooms:ROOMID:online 保持同步。从中 SPOP,一旦它为空,将内容 rooms:ROOMID:online 复制到它。

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 2022-01-22
      • 1970-01-01
      • 2015-04-12
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多