如何在REDIS中以最有效的方式基于多个标准查询我的数据


How to query my data based on multiple criteria in the most efficient way in REDIS?

我不习惯使用键值存储。

我正在创建一个网页游戏。我的目标是将在线用户相互匹配。一旦用户在线并决定玩游戏,他们将被临时添加到REDIS数据存储中(直到他们注销)。

我将使用他们的ID作为键和他们的详细信息(NAME, GAMETOPLAY, RANKING, STATUS,…等)在散列或集合中添加他们。还不确定哪种数据类型更好。

我如何匹配用户(即REDIS记录)在一起?基本上,我将在REDIS数据存储中有待挂用户,我想通过每个记录,直到我得到一个匹配。但显然你不能在REDIS中搜索,那么我怎么做到这一点呢?

我不想从redis中取出每条记录只是为了检查它的细节。这似乎是非常昂贵的资源。一定有更好的办法。

编辑:

更准确地说。我想根据多个条件查询我的数据。显然你可以用排序集来做。但我仍然需要多种标准。有些条件,我可以通过存储在不同的表/数据库(?)我想,但不是全部。

编辑2:

显然我可以使用多维索引来完成这个。

REDIS做搜索的方式是首先为你的查询创建和维护索引。

假设你要添加一个新用户,排名X, GAMETOPLAY Y,你将通过排名范围和GAMETOPLAY的精确值来搜索用户。

你现在的任务是创建结构,将有那些用户为你,像排序集"gametoplay:gametoplayvalue"(键= user_id,和分数=排名)

多个搜索条件的其他解决方案是使用:

http://redis.io/commands/sinter

http://redis.io/commands/sinterstore

维护集合,如:

  • status_set:status (key = user_id)
  • gametoplay_set:game_id (key = user_id)
  • 排名:ranking_from_x_to_y (key = user_id)

当你想通过多个条件找到用户时,你可以使用烧结来获得交集。

总结一下:

  • 添加用户时,将他的ID添加到所有需要的集合/哈希
  • 然后查询id的集合/哈希值
  • 删除用户时,从所有集/哈希中删除他的ID

您可以通过在id前添加一些前缀来存储用户的临时详细信息。

tmp_ (user_id)

在user_id前添加tmp_以获取临时详细信息。