反馈 帖子动态推送方案探讨

sihaiyunyou · 2011年11月24日 · 最后由 aNdReW_Qx 回复于 2012年02月04日 · 3021 次阅读

每次打开首页的话,如果是我看过的帖子或是收藏的帖子和没有看过没有收藏的用颜色区分出来,我关注的或收藏的或看过的有新动态在上面标一个小红圈,就像 iphone 的未读短信

太过头了,还不如来邮件提醒简单

可以把颜色变掉

#1 楼 @huacnlee 这个放在论坛或许不是很合适,不过我想问下有没有人知道实现这种查询 (即查询距某个时间以来有多少个更新) 有没有比较高效的实现方案,比如用 redis 实现,具体怎么实现法..一直没头绪

#3 楼 @aNdReW_Qx 如果是要精确到有多少个更新,这样的需求也许放在每次更新操作之后的 callback 里去起一个 background job 来做比较好,拿 Topic 举例,在每次对 Topic 的操作之后在 background job 里对所有参与者(包括发帖人、回帖人、收藏者等)push 通知

#4 楼 @nowazhu 哦,这是做推送的思路了,有没有可能做成 pull 的方法

#5 楼 @aNdReW_Qx 这个思路也可以做成 pull,也许我表达有误。这里的 push 通知是一个广义的说法,并不是特指 push 通知给浏览器这样的。在 background job 里可以调用 User 的某个方法来响应本次操作,比如给某个 redis-objects 属性 incr(1) 之类的。

#6 楼 @nowazhu 我懂你的意思了,对于这个例子是很完美的解决方案。不过我其实... 最想知道的就是 redis 的 list 有没有办法做成按照时间来查询的,比如我要取某个时间戳以后添加的新的信息。不知道有没有好的办法,或是要换一种思路?

#7 楼 @aNdReW_Qx 把时间戳作为 score 然后用 zrangebyscore 怎么样 http://redis.io/commands/zrangebyscore

某个时间点到现在的所有信息:zrangebyscore "yourkey", timestamp.to_i, Time.current.to_i 某个时间点以后的所有信息:zrangebyscore "yourkey", timestamp.to_i, "+inf"

redis list 是有 SORT 方法的,redis 支持 Sorting by external keys,如果 list 里的每个项都包含某个 key,那么可以用该 key 来排序 list,比如:

SORT mylist BY timestamp

然后配合 LRANGE,可以得到所有某个时间戳之后的新信息。

#8 楼 @cqpx #9 楼 @nowazhu 谢谢,我再看下文档 ,应该用 SORT LIST 解决比较方便

如果插入的时候排好序,用普通数组二分查找也很快。

设计一个提醒表,回复的时候,给已经回复的用户 添加一条未读记录不就行了吗,怎么都上 push,pull 了,没必要这么整吧!!!

#12 楼 @wxianfeng 嘛。我中途跑题了 你这个方法是可以,不过万一数据多还是要用后台任务的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号