0

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

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

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

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

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

4

1 回答 1

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

于 2012-07-31T16:16:25.290 回答