我的网络应用程序中有一个活动流,它使用的设置与此处描述的设置几乎相同:如何在社交网络中实现活动流
简而言之:数据结构目前仅包含一个长的非规范化 MySQL 表。
上面的帖子还建议使用 Redis 作为每个用户最近 100 个左右活动的缓存的可能性。我已经开始开发这种方式,每个用户都有一个名为“uid:123:activities”之类的 Redis 列表,每个列表项都是保存为字符串的 json 编码 PHP 数组。JSON 包含诸如“user_id”、“time”、“photo_id”等信息。
但是,我似乎面临一个问题。当从应用程序中删除该活动的参与者之一时,如何从 Redis 的用户列表中删除该活动?例如,如果您关注的人删除了他们的帐户,则需要从您的信息流中删除任何涉及他们的活动。我看到了两种可能的方法,但都不是很好:
- 每次删除某些内容时,循环遍历所有用户列表和列表项以查找对其的引用,如果存在,则将其删除。(这可能不太现实)
- 从列表中构建蒸汽时,请检查该项目是否存在以及是否确保从列表中删除该项目。
很多人建议将 Redis 用于以类似方式构建的活动流,但我还没有看到保持列表与原始数据源同步的问题。
在我走选项 2 的路线之前,有没有人有任何其他建议?