这是Redis的一个很好的用例吗?

时间:2012-07-31 15:26:07

标签: redis

假设我有能力让用户互相交流,我有一个显示用户朋友的小部件。

这里是否会使用Redis通过user.id存储关系?

1,2
1,5
4,1
3,1

1.friends -> 2, 3, 4, 5

但是,我需要为这些朋友获取详细信息。我是否正确地假设这将使用查询"id IN(2,3,4,5)"?

完成

1 个答案:

答案 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管道批处理这些查找并最大限度地减少网络费用。