假设我有能力让用户相互交友,并且我有一个显示用户朋友的小部件。
是否会在这里使用 Redis 来通过 user.id 存储关系?
1,2
1,5
4,1
3,1
1.friends -> 2, 3, 4, 5
但是,我需要为那些朋友获取详细信息。我是否正确假设这将使用查询来完成"id IN(2,3,4,5)"?
假设我有能力让用户相互交友,并且我有一个显示用户朋友的小部件。
是否会在这里使用 Redis 来通过 user.id 存储关系?
1,2
1,5
4,1
3,1
1.friends -> 2, 3, 4, 5
但是,我需要为那些朋友获取详细信息。我是否正确假设这将使用查询来完成"id IN(2,3,4,5)"?
你绝对可以使用 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 管道对这些查找进行批处理并最大限度地减少网络费用。