gpt4 book ai didi

redis - 实现以下流

转载 作者:IT王子 更新时间:2023-10-29 06:05:32 26 4
gpt4 key购买 nike

我正在开发一个用于照片共享和关注系统的应用程序,因此无论谁关注 x 用户,那么 x 用户的照片都会出现在他的关注中。

我将我的数据存储在redis中,如下所示

sadd rdis_key+user_id photo_id
set redis_key+photo_id+data data_of_photo
sadd redis_key+follow+user_id follower_id

现在我想直接获取关注者的所有 photo_id 而不是循环。

最佳答案

这是一个简单的扇出问题,您不能直接用 Redis 轻松解决。

您可以使用 Lua 来完成,但您将在操作期间阻止 Redis。

我有一个开源项目,它做同样的事情,但我在代码中做,因为有人创建了一个新帖子。我想这就像一张新照片。

https://github.com/pjuu/pjuu/blob/master/pjuu/posts/backend.py#L252

虽然我使用排序集并使用 unix 时间戳作为分数,因此它们始终按顺序排列。

当 User1 创建一张新照片时,您查找他们的关注者列表。如果您使用的是排序集,您可以通过以下方式获得:

followers = zrange followers:user1 0 -1

然后简单地遍历该列表中的所有条目:

for follower in followers: zadd feed:user2 <timestamp> <photo_id>

这样,这个新帖子现在被推送给所有关注 user1 的用户。

如果您希望即时完成此操作,那么坏消息是:您将需要一些关系数据和一种查询值的方法,而您无法做到这一点。 SQL、Mongo、Couch 等...

这只是伪代码,因为您没有提到您使用的是哪种语言。

编辑:根据问题,这将在 Redis 端完成

local followers = redis.call('zrange', KEYS[1], 0, -1)

for key, value in pairs(followers) do
redis.call('zadd', 'items:'..value, ARGV[1], ARGV[2])
end

return true

这将需要用户关注者的关键来迭代。 zset 分数和值(value),并将这些添加到每个用户的项目中。您将需要更改它以满足您的确切需求。如果您想使用集合,则需要使用 sscan 或其他东西。 Zsets 更容易,而且顺序。

关于redis - 实现以下流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com