实现Timeline

Redis实现Timeline

上回写了使用Redis实现关注关系,这次说说使用Redis实现Timeline。

Timeline的实现一般有推模式、拉模式、推拉结合这几种。
推模式:某人发布内容之后推送给所有粉丝,空间换时间,瓶颈在写入;
拉模式:粉丝从自己的关注列表中读取内容,时间换空间,瓶颈在读取;
推拉结合:某人发布内容后推送给活跃粉丝,不活跃粉丝则使用拉取。

目前只讨论推模式,考虑单个feed内容实体存入散列(hashes)、每个用户的timeline列表存入列表(lists)。

1、发布

发布者发布内容后,生成唯一feedID,以feedID为key存入hashes。
首先从发布者的粉丝表里获取所有粉丝,再进行推送。

逻辑如下:

// 使用Redis INCR操作,生成唯一postID
$feedID = $redis->INCR("global:postID");
// 存入Hashes
$feedData = [
    ‘userID‘ => 1,
    ‘timestamp‘ => ‘1458680000‘,
    ‘content‘ => ‘这是一条tweet‘,
    ‘platform‘ => ‘web‘,
];
$redis->HSET($feedID, $feedData);

// 写入发布者自己的已发布列表
$redis->LPUSH("{$userID}:tweets", $feedID);

// 写入发布者自己的timeline
$redis->LPUSH("{$userID}:timeline", $feedID);

// 获取发布者粉丝列表
$follwerIDs = $redis->SMEMBERS("1:followers");

// 写入
foreach ($follwerIDs as $followerID) {
    $redis->LPUSH("{$followerID}:timeline", $feedID);
}

2、读取

某用户登陆之后,获取timeline Lists中的值,再从Hashes取数据进行处理。

$feedIDs = $redis->LRANGE("{$userID}:timeline", 0, 30); //取30条数据
foreach ($feedIDs as $feedID) {
    $feedData = $redis->HGETALL($feedID);
    // TODO:进一步进行处理、整合等操作。
}

3、删除

当发布者删除某条消息后,循环所有粉丝列表,并执行删除操作。

// 从发布者自己的已发布删除掉
$redis->LREM("{$userID}:tweets", 1, $feedID);

// 从发布者自己的timeline删除掉
$redis->LREM("{$userID}:timeline", 1, $feedID);

// 获取发布者粉丝列表
$follwerIDs = $redis->SMEMBERS("1:followers");

// 删除
foreach ($follwerIDs as $followerID) {
    $redis->LREM("{$followerID}:timeline", 1, $feedID);
}

timeline从某种角度来说是临时性的,如果年代久远,可不必操作粉丝的timeline。

后记

Timeline系统说起来会很复杂,也不可能只靠Redis去实现。本文只是一个大体的思路,应对小数据量基本足够。

博客:http://blog.lovemydeer.com/2016/03/19/redis-timeline.html

时间: 2024-10-12 23:19:36

实现Timeline的相关文章

Chrome开发者工具详解(3):Timeline面板

Timeline面板 Timeline面板是整个面板里面最复杂的一个面板,涉及的东西比较多.可以利用这个面板来记录和分析网页运行过程中的所有活动行为信息. 你可以充分利用这个面板来分析你的网页的程序性能问题. 概述 下图是从Google官方网站中介绍Timeline面板的图贴到这里,该面板主要包括4大块窗格(Pane): Controls 录制开关和控制录制过程中需要记录哪些信息. Overview 网页性能的概要信息. Flame Chart CPU堆栈轨迹的可视化图表(火焰图).在图表里面有

Timeline

Timeline面板 Chrome开发者工具详解(3)-Timeline面板 注: 这一篇主要讲解面板Timeline,参考了Google的相关文档,主要用于公司内部技术分享.. 更新时间:2016-10-24 Timeline面板 Timeline面板是整个面板里面最复杂的一个面板,涉及的东西比较多.可以利用这个面板来记录和分析网页运行过程中的所有活动行为信息.你可以充分利用这个面板来分析你的网页的程序性能问题. 概述 下图是从Google官方网站中介绍Timeline面板的图贴到这里,该面板

使用Chrome DevTools的Timeline分析页面性能

随着webpage可以承载的表现形式更加多样化,通过webpage来实现更多交互功能,构建web应用程序已经成为很多产品的首要选择.这种方式拥有非常明显的优势:跨平台.开发便捷.便于部署和维护等等,但随着功能的不断积累,web应用程序也会变得越来越复杂.但是,我们仍然想要在webpage支持丰富的呈现形式的同时,让页面效果能够达到>=60fps(帧)/s的刷新频率以避免出现卡顿,就需要我们使用一些比较直观的方式来分析衡量页面的性能问题,为性能优化方案提供依据. 为什么是60fps?我们的目标是保

看了一下unity5.6的新功能 以及Timeline

3月31日unity5.6发布,然而timeline(前sequence模块)被delay到unity 2017.上个星期官方又发布了unity 2017的beta版本 有一阵子没写博客了,写一篇整理归纳 1.Physics Debugger 用于可视化调试场景中的物理组件,其中Hide系列开关都是针对特殊高亮的 他只会隐藏高亮,而不会真正隐藏对象. 2.Test Runner集成播放模式测试 这个之前的单元测试插件就有,叫做集成测试,不过很不好用. 大概感觉是有一些改动,对比一下: 新版本(E

Chrome 开发工具之Timeline

认识Timeline 接下来开始详细的分析下每个标记处的作用(有几个还没标记出来的也有介绍,顺序是按照面板从左到右,从上到下) 记录按钮 是否需要对当前页面的运行进行记录,当打开记录按钮开始执行记录过程的时候,该按钮显示红色 清除按钮 按下后会清除之前的记录信息,瞬间白板 捕获列表 捕获满足后面所列出的条件的相关事件,在这个的右边有选择框供选择 js概况 js函数执行的信息,主要展现在事件调用瀑布图中 如图所示,我们能够看到函数的调用(这里截取了一段短时间内的事件瀑布图) 信息记录和记忆线 当打

《Programming WPF》翻译 第8章 2.Timeline

原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延伸.它通常还描述了一个或多个在这段时间所发生的事情.例如,在前面章节描述的动画类型,都是Timeline.可哦率这样的DoubleAnimation: <DoubleAnimation From=”10” To=”300” Duration=”0:0:5” /> 正如Duration属性指出的,这代表了一个5秒的时间长度.所有类型的Timeline总是有一个开始时间和一个持续时

超酷的JavaScript叙事性时间轴(Timeline)类库

在线演示 Timeline 是我见过的最酷的展示事件随时间发展的javascript实现.你可以基于时间使用讲故事的方式来创建时间轴特效,整个时间轴以幻灯的方式来展示,你可以穿插图片,视频或者是网站,而且拥有非常华丽的动画效果和缩略图效果,非常适合做网站的关于我们功能. 主要特性 支持外部社交网站,例如,twitter.com, youtube,flickr,vidmeo,Google Maps 开源免费 文档齐全 使用简单 支持数据格式:JSON,Google Doc,HTML 如何使用 插入

echarts中视觉映射器(visualMap)与时间轴(timeline)混用的实现方法

1.简述 echarts中的 timeline 组件,提供了在多个 ECharts option 间进行切换.播放等操作的功能. 与其他组件些不同,它需要操作『多个option』. 所以除了基准的baseOption外,我们还需要设置一个原子option和多个原子option的复合option. 2. baseOption实现方式如下(以石家庄市地图为例): var mapDataByAreaTest = [ //各区域初始值 {name: '长安区', value: 12}, {name: '

有关百度一键分享链接到微信朋友圈无法打开网页,报404错误的解决办法,from=timeline&amp;isappinstalled=0,和伪静态规则有关

最近有好友反映用百度一键分享,分享网页链接到微信朋友圈的时候,发现链接无法打开,提示无法找到该页404错误,同样分享到QQ.微博等链接 能正常访问,这么明显的错误,百度和腾讯应该不会忽略吧. 接报后,我专门分析了一遍他公司的网站,确实是微信朋友圈无法分享网站链接.但是通过微信扫一扫能正常浏览网页,点击分享到朋友圈后,在  从朋友圈去访问的时候,提示无法找到该页,报404错误. 经反复检测,排除了分享代码的问题,和服务器配置问题.我开始怀疑伪静态规则,开启URL重写造成的,我关掉了伪静态,让网页形

Chrome Developer Tools:Timeline Panel说明

一.Timeline panel 概况 Timeline工具栏可以详细检测出Web应用在加载过程中,时间花费情况的概览.这些应用包括下载资源,处理DOM事件, 页面布局渲染或者向屏幕绘制元素. 如下图,Timeline面板分为四个模块-控制模块,概述模块,火焰图模块,细节模块. 控制模块Control:控制开始记录,停止记录,配置一条记录要抓取信息类型,包括:JS概况,内存,重绘,截图.. 概述模块Overview:页面性能的一个高度总结. 火焰图模块Flame Chart:CPU栈的可视化描述