1 手机发送朋友圈,然后把数据先暂存到本地,本线线程异步把图片、视频资源上传到CDN,并且把发送的朋友圈相关数据(还有上传返回的链接)发送到后台服务器。
2 然后本机刷自己朋友圈的时候直接从本地拉取图片、视频资源即可
-- 如果发送的过程中,手机没电或者进程被关闭了怎么办? 
---- 删除是不可能删除的,只能后面重启朋友圈的时候重发(后台服务器根据当前朋友圈的发送时间戳和用户唯一标识做幂等性就行了)
3 后台服务器接受到发送的朋友圈后,先把数据插入 朋友圈发布表、相册表(用户自己的相册信息)
===============================================================
发布表
id    user_id    发布内容    发布类型    资源url    发布状态    发布时间
相册表
id    user_id    发布表id    发布表时间    发布状态
===============================================================
4 建立一张时间线表,然后离线批处理当前新发布用户的好友的时间线,把发送的朋友圈信息插入到可以看他数据好友的时间线表里面,并且用redis缓存一下当前用户好友的更新数量,如incr userId:32222:nowatch:num 1(朋友是32222,这个缓存代表32222未看的朋友圈数量加 1,这样这个朋友下次去刷朋友圈(时间线)的时候就可以从redis取值判断是否有新数据,如果有就从数据库中拉取数据(根据朋友传过来的时间节点去时间线表拉取最新的数据,时间点之前的直接从本地加载即可(当前如果他清了缓存的话,那就只能全部从db时间线表中加载,不走本地缓存数据)),没有就保持不变,从本地缓存的微信数据拉取)
===============================================================
时间线表
id    user_id    发布表ID    发布类型    有效时间    发布状态    发布时间    发布内容
===============================================================
5 朋友圈权限怎么做?
比如拉黑、限制三天内查看的权限
可以在插入时间线表的时候,对应关联权限,如果拉黑操作也对应处理当前时间线表(标记为删除),然后存入redis,标记一下当前对应用户的查看权限(在某个时间线,用时间戳来判断,因为刷朋友圈是从上刷到下的,所以可以用时间节点来判断)发生了变动,当这个用户再次刷朋友圈刷到这个时间线的时候,看到这个reids标记机会重新去加载数据(而不会走本地)
朋友圈评论怎么做?(评论信息入库时需要同步到redis)
1 发表评论时(可以是自己发,也可以是别人发),入库并同步到redis中set中,然后自己需要看自己发表的朋友圈时,用smembers(扫描出集合所有元素) + scard(获取集合个数)就能拿到自己发的朋友圈的信息,不过可以加一条redis标记(另外,如果当前看的是自己发的朋友圈的时候,可以将评论缓存在本地,如果发现redis标记时间戳没变化,则直接从本地拉评论数据,反之变化才重新重redis缓存拉取新的评论)
2 怎么找到两个用户之间的共同好友(就是用户B要看用户A发布的朋友圈时怎么看?),应该如下: 
- 1 用户A创建一个好友集合SetA,里面就存储用户userId 
- 2 用户B创建一个好友集合SetB,里面就存储用户userId 
- 3 然后每个朋友圈对应创建一个redis 集合 SetFriendComment 用于存储评论的用户id,对应可以创建一个hash用于存储id对应的评论信息 
4 然后每次获取这个朋友圈点赞信息时,可以用redis的命令如下: # sinter SetFriendComment SetA 上面拿到的交集就是用户A B的共同好友,然后用交集的id集合去hash里面获取具体的评论信息 
- 同理:点赞也是这样做~~~~~~~~~

微信朋友圈设计方案简述相关推荐

  1. 浅谈微信朋友圈的架构设计

    微信朋友圈是一种社交媒体应用,主要功能是让用户分享图片.视频和文字等内容,并与好友互动.一个基本的微信朋友圈设计方案: 数据库设计 微信朋友圈需要存储大量的图片和视频等多媒体数据,因此需要设计一个高效 ...

  2. IM开发技术学习:揭秘微信朋友圈这种信息推流背后的系统设计

    本文由徐宁发表于腾讯大讲堂,原题"程序员如何把你关注的内容推送到你眼前?揭秘信息流推荐背后的系统设计",有改动和修订. 1.引言 信息推流(以下简称"Feed流" ...

  3. 揭秘微信朋友圈这种信息推流背后的系统设计

    1.引言 信息推流(以下简称"Feed流")这种功能在我们手机APP中几乎无处不在(尤其是社交/社群产品中),最常用的就是微信朋友圈.新浪微博等. 对Feed流的定义,可以简单理解 ...

  4. 微信朋友圈广告如何投放?怎样收费?

    微信在网络营销策划上有着非常不同寻常和显著的优势,那就是它可以在交际圈中容易产生散布伤害,会让用户进行准确性.准确性推广营销.这样微信朋友圈广告宣传策划方案该怎么做呢? 微信朋友圈广告总体目标 微信朋 ...

  5. 微信朋友圈信息流的系统设计

    引言 信息推流(以下简称"Feed流")这种功能在我们手机APP中几乎无处不在(尤其是社交/社群产品中),最常用的就是微信朋友圈.新浪微博等. 对Feed流的定义,可以简单理解为只 ...

  6. python获取登录按钮_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...

  7. 仅展示近三天的动态设置_微信朋友圈设置三天可见了吗?

    忘记从何开始微信朋友圈和微博都可以设置显示权限了,目的就是为了方便我们自行选择显示的权利,但是微信你们是否也开启了三天权限呢?说真的,我的朋友圈开启了,昨晚看见朋友圈疯转的一篇图文信息"微信 ...

  8. 一个仿微信朋友圈的图片查看框架 - PhotoViewer

    PhotoViewer 该图片查看器是模仿微信朋友圈查看图片编写 allprojects {repositories {...maven { url 'https://jitpack.io' }}}复 ...

  9. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  10. mfc让图片与按钮一起_微信朋友圈发图片还能添加语音,简单两步就能搞定!今天学到了...

    大家好,我是分享科技小达人~ 今天跟大家探讨的问题是:[微信朋友圈发图片添加语音的方法]. 日常生活中,我们都喜欢发朋友圈,今天就来教你如何在微信朋友圈,发送带语音的图片,方法非常简单,一起来学习一下 ...

最新文章

  1. Verilog以及VHDL所倡导的的代码准则
  2. 33%制造企业跑步上云,云MES市场将达到23.4亿美元
  3. tensorflow tf.data.TextLineDataset()对象 (包含来自一个或多个文本文件的行的“数据集”) 不懂是啥玩意??
  4. 南京php基础学习,南京玄武区php培训有哪些(学习PHP的优点有哪些)
  5. Python这五个坑,80%你不知道(对的,五个你知道1个就达到一般水平了)
  6. Qt for Android 部署流程分析
  7. SAP License:关于MRP产生的采购申请检查、与采购部的衔接处理
  8. BiLSTM+CRF命名实体识别:达观杯败走记(下篇)
  9. 爬虫日记(71):用OCR来对抗字体反爬
  10. 如何卸载 think-cell?丨卸载教程丨卸载办法
  11. AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
  12. seqkit根据基因id_西番莲内参基因及其筛选方法和应用与流程
  13. devise 笔记
  14. 【爱吃肉的阿C】使用URL类将文件下载到本地
  15. 穿上钢铁侠战衣变身钢铁侠,现代表示我做到了!
  16. hadoop文件读写示例
  17. 2021年福建高考成绩排名查询,福建高考排名查询方法,2021年福建高考成绩位次全省排名查询...
  18. 【计算理论】下推自动机 PDA ( 上下文无关语言 CFL 的 泵引理 | 泵引理反证示例 | 自动机扩展 )
  19. windows系统日志查询
  20. pads9.5转AD09

热门文章

  1. Vue实现户籍管理系统户籍信息的添加与删除
  2. html5建站模板怎么用,怎么用模板建网站
  3. 关于VS2008的Web创作组件安装错误
  4. 关于用友凭证打印模板
  5. 2018年的43个最佳网络监控工具
  6. python 打包过程
  7. Lisp真的是屠龙之技吗?
  8. PHP 快递地图模式,使用D3.js创建物流地图的步奏详解
  9. 一键生成ai伪原创文章的方法
  10. Unity资源加载方式以及管理