我希望使用redis存储大量的用户ID,并且对于每个ID,还要记录该用户之前所属的“组ID”。
用户ID的数量相当大(约1000万);唯一组ID的数量约为3-5个。
我的目的是为了日常LuT:
- 找到给定用户的组ID; - 返回与给定用户具有相同组ID的其他用户列表(指定长度)。
在Redis中可能有一种惯用方法或者至少是最有效的方法。如果有的话,我想知道它是什么。这是我工作实现的简化版本(使用Python客户端):
User_ID | Group_ID
1043 | 2
2403 | 1
用户ID的数量相当大(约1000万);唯一组ID的数量约为3-5个。
我的目的是为了日常LuT:
- 找到给定用户的组ID; - 返回与给定用户具有相同组ID的其他用户列表(指定长度)。
在Redis中可能有一种惯用方法或者至少是最有效的方法。如果有的话,我想知道它是什么。这是我工作实现的简化版本(使用Python客户端):
# assume a redis server is already running
# create some model data:
import numpy as NP
NUM_REG_USERS = 100
user_id = NP.random.randint(1000, 9999, NUM_REG_USERS)
cluster_id = NP.random.randint(1, 4, NUM_REG_USERS)
D = zip(cluster_id, user_id)
from redis import Redis
# r = Redis()
# populate the redis LuT:
for t in D :
r.sadd( t[0], t[1] )
# the queries:
# is user_id 1034 in Group 1?
r.sismember("1", 1034)
# return 10 users in the same Group 1 as user_id 1034:
r.smembers("1")[:10] # assume user_id 1034 is in group 1
所以我使用普通的redis集合来实现这个LuT;每个集合都是以组ID(1、2或3)为键,总共有三个集合。
考虑到我想要对其运行的查询类型,这是存储此数据最有效的方式吗?