即刻App年轻人的同好社区
下载
App内打开
鲨雕
5年前
写了一个feed流的逻辑
在线推,离线拉
1. redis维护一个在线用户列表,当用户打开APP后三个小时内均算在线(三个小时外的用户被移除列表,用zset实现)
2. 用户发动态后向在线粉丝的feed流中同步存动态的id。这样有个好处,如果用户在线就不用遍历关注者列表获取动态了(尤其是当关注者很多的时候,这是个很费时间的过程)。
3. 打卡APP后,查看自己是不是在在线列表里,如果是的话直接返回feed流中的内容。如果判断为离线,则需要根据feed流中最新的动态时间戳遍历关注者列表,获取最新的动态。
4. feed流不是无限长的(主要是穷,其次是没必要),这里我保存500个,500个也不少了,一次返回10个要往下刷新50次才能到头,超过500的也不存数据库了直接舍弃。算了下5000用户每人一个长度500的zset作为feed流,key 30B,score 13B,value 18B ,占用大小为958.93MB。PS:redis服务器内存4GB,我把mongoDB分了8GB的服务器...是不是有点傻

大家帮忙看看这个设计有没有问题😊
160

来自圈子

圈子图片

JitHub程序员

389203人已经加入