假设我有能力让用户互相交流,我有一个显示用户朋友的小部件。
这里是否会使用Redis通过user.id存储关系?
1,2
1,5
4,1
3,1
1.friends -> 2, 3, 4, 5
但是,我需要为这些朋友获取详细信息。我是否正确地假设这将使用查询"id IN(2,3,4,5)"?
答案 0 :(得分:2)
您绝对可以使用redis来表示此数据。一种策略是为每个用户详细信息使用哈希,按用户ID(例如user:1 => {'name': 'foo', 'email': 'foo@foo.foo'}
)和一组用户ID(例如user:1:friends => (2, 3, 4, 5)
)键入。您是正确的,然后您需要为朋友集中的每个用户执行hgetall user:<ID>
以获取该用户的信息。 HGETALL是O(N),其中N是字段数;对于类似于用户对象的东西,其中字段的数量将很小并且(相对)固定,HGETALL实际上是O(1),因此额外的查找不会非常昂贵。您还可以使用redis管道批处理这些查找并最大限度地减少网络费用。