我不习惯使用键值存储。
我正在创建一个网页游戏。我的目标是将在线用户相互匹配。一旦用户在线并决定玩游戏,他们将被临时添加到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_以获取临时详细信息。