【问题标题】:Separate lists in RedisRedis 中的单独列表
【发布时间】:2021-01-28 04:48:16
【问题描述】:

我正在构建一个游戏服务器,其中我持有一个连接用户列表,同时还有一个战斗列表,这两个列表是分开的。

我将战斗数据保存在 Redis 数据库中,以战斗 ID 作为键, 我可以在同一个 Redis 数据库中使用已连接用户列表,并以优雅的方式获取已连接用户列表,同时避免战斗数据吗?

我找不到解决方案,目前在我的 nodeJs 服务器的 JS 字典中保存连接的用户

更新:

澄清疑问,

连接的用户对象是 -

connectedUser = {
   nickname: string, (key)
   socketId: string,
   status: string,
   rating: number
}

我想使用 getUser(nickname) 来查询数据,这将获取特定用户,并使用 getAllUsers() 来获取所有连接的用户。

至于比赛,它包括所有比赛数据和统计数据

match = {
   id: string, (key)
   nicknameOne: string,
   nicknameTwo: string,
   ...
}

我用 id 查询匹配项,并认为它适用于哈希表和 hset 以及 hget 复杂性 wize。

关于连接用户的查询,我想知道使用简单的 js 字典是否可以提供更快的查询结果。

js 字典是这样的 -

connectedUsers = {}
adding user - 
user  = {
  key: nickname,
  value: {
     socketId: string,
     status: string,
     rating: number
  }
}

同时获得这样的特定用户 -

connectedUsers[nickname]

并以这种方式迭代 -

for(let key in connectedUsers) {
   //value - connectedUsers[key];
}

【问题讨论】:

  • 不确定到底要支持哪些查询。如果您能提供一些您希望拥有的数据结构和查询示例,将会有所帮助。

标签: redis


【解决方案1】:

就性能而言,没有什么能比 JS 字典更胜一筹。即使使用像 Redis 这样快的东西,您也会增加进程间通信(如果托管在同一台机器上)或网络延迟的开销。

如果您想使用 Redis 进行持久化,存储连接用户的一种方法是使用散列,其中键是昵称,值是用户对象。您可以通过HGET users-key userId 获取 1 个用户,HGETALL users-key 获取所有用户。

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2021-12-02
    • 2016-08-05
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多