按价值进行简单搜索?

时间:2011-10-31 12:08:47

标签: database redis

我想存储一些如下信息(请注意,我根本不拘泥于这个数据结构,但这会向您显示我想要存储的基础信息):

{ user_id: 12345, page_id: 2, country: 'DE' }

在这些记录中,user_id是唯一字段,但page_id不是。

我想将其转换为Redis数据结构,我希望能够按如下方式运行高效搜索:

  • 对于user_id 12345,找到相关的国家/地区。
  • 对于page_id 2,找到所有相关的user_ids及其国家/地区。

实际上可以在Redis中执行此操作吗?如果是这样,我应该使用哪些数据结构,以及在插入记录时如何避免重复记录的可能性?

2 个答案:

答案 0 :(得分:4)

听起来您需要两种密钥类型:用于存储用户数据的HASH密钥,以及包含相关用户列表的每个页面的LIST。下面是一个如何工作的例子。

加载数据:

> RPUSH page:2:users 12345
> HMSET user:12345 country DE key2 value2

拉数据:

# All users for page 2
> LRANGE page:2:users 0 -1

# All users for page 2 and their countries
> SORT page:2:users By nosort GET # GET user:*->country GET user:*->key2

从页面删除用户:

> LREM page:2:users 0 12345

在SORT中重复GET以检索用户的其他值。

我希望这会有所帮助,请告诉我您是否有任何需要澄清的内容,或者您​​是否需要进一步的帮助。我还建议阅读redis web site中可用的命令列表和文档,特别是有关SORT操作的信息。

答案 1 :(得分:1)

由于user_id是唯一的,国家/地区也是唯一的,因此请将它们保存在一个简单的键值对中。在这种情况下,对用户进行查询是O(1)...然后,保留一些Redis sets,键入page_id,成员使用所有user_ids ..