我正在尝试实现用户A关注用户B的场景,因此用户A的所有关注者也将关注用户B.
例如:
假设我们有4个用户(用户:1个用户:2个用户:3个用户:4个)
- >表示'跟随'
User2->用户3,用户4
新动作: User1->用户2
我想更新用户的所有关注者:2(也就是用户:1)跟随用户3和用户4以及:
预期结果
User1->用户2,用户3,用户4
User2->用户3,用户4
我需要在所有用户上使用此行为
我开始考虑我的解决方案。请让我知道如何真正适应。
我正在使用密钥为[unsername] _followers的集合。 每当用户有新的关注者时,我将检索他的关注者列表并逐个迭代代码并通过向其添加新用户来修改他们的列表。
问题开始变得复杂,因为我还需要更新关注者的关注者
代码:
requirement fact: if a follow b, b must follow a
//creating new users:
HMSET user:110 username rot
hMSET user:111 username jane
HMSET user:112 username kenny
//adding follow relations:
//user 110 started to follow user:111
sadd user:110_following user:111
sadd user:111_following user:110
//user 112 started to follow user:111
sadd user:111_following user:112
sadd user:112_following user:111
//update other "influenced" followers:
127.0.0.1:6379> smembers user:111_following
1) "user:111"
2) "user:110"
3) "user:112"
//need to update 110 (since 110 follows 111 which follow 112)
sadd user:110_following user:112
127.0.0.1:6379> smembers user:110_following
1) "user:111"
2) "user:110"
3) "user:112"
//need to update 112 (since now 110 also follows 112)
sadd user:112_following user:110
你怎么看待这种方式?
谢谢, 射线。
答案 0 :(得分:0)
毕竟,你的方法很好。无论如何还有一些问题:
user:x
(其中x
是用户ID)存储在集合中,但只存储x
。:
分隔符:users:11:followers
。zrange
)。multi
命令以原子方式执行此操作。hset users 1 { "userName": "Matias" }
而不是hset users:11 username Matias
。由于您要使用list
,set
和sorted set
命令执行大部分操作,因此将每个用户属性存储在哈希中的原因很少。 sunionstore
?这样,如果您将用户A的关注者与用户B关注者联合起来,并将结果存储在用户B关注者中,因为它设置,结果集将只包含唯一的用户ID。