新浪微博开放平台中的 redis 实践

上传人:f****u 文档编号:109721285 上传时间:2019-10-27 格式:PDF 页数:55 大小:1.19MB
返回 下载 相关 举报
新浪微博开放平台中的 redis 实践_第1页
第1页 / 共55页
新浪微博开放平台中的 redis 实践_第2页
第2页 / 共55页
新浪微博开放平台中的 redis 实践_第3页
第3页 / 共55页
新浪微博开放平台中的 redis 实践_第4页
第4页 / 共55页
新浪微博开放平台中的 redis 实践_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《新浪微博开放平台中的 redis 实践》由会员分享,可在线阅读,更多相关《新浪微博开放平台中的 redis 实践(55页珍藏版)》请在金锄头文库上搜索。

1、 新浪微博开放平台 Redis 实践 唐福林 http:/fulin.org 大纲 Redis 简介 新浪微博中的Redis实践 好友关系 计数器 经验教训 Redis in memory (database?) data can dump to disk many useful data structure FAST both read and write we start use from 2.0, now 2.4 微博=feed+关系+数字 微博=feed+关系+数字 feed 看微博,看评论 发微博,转发微博,发评论 微博=feed+关系+数字 微博=feed+关系+数字 关系 关注,

2、取消关注 关注列表,粉丝列表 微博=feed+关系+数字 微博=feed+关系+数字 数字 微博,粉丝,关注数 评论给我的,我的,我评论的 小黄签提醒:新粉丝,新,新评论 未读微博数 微博=feed+关系+数字 微博=feed+关系+数字 数字 微博,粉丝,关注数 评论给我的,我的,我评论的 小黄签提醒:新粉丝,新,新评论 未读微博数 微博=feed+关系+数字 微博=feed+关系+数字 数字 微博,粉丝,关注数 评论给我的,我的,我评论的 小黄签提醒:新粉丝,新,新评论 未读微博数 微博=feed+关系+数字 微博=feed+关系+数字 数字 微博,粉丝,关注数 评论给我的,我的,我评论的

3、 小黄签提醒:新粉丝,新,新评论 未读微博数 微博=feed+关系+数字 微博=feed+关系+数字 feed mysql mc 微博=feed+关系+数字 关系 微博=feed+关系+数字 mysql: relation.following fromuid, touid, addtime 关注列表:select * from following where fromuid=? order by addtime desc 粉丝列表:select * from following where touid=? order by addtime desc 问题:fromuid, touid 都为索引

4、,插入慢 微博=feed+关系+数字 mysql: relation.following relation.follower fromuid, touid, addtime 关注列表:select * from following where fromuid=? order by addtime desc 粉丝列表:select * from follower where touid=? order by addtime desc 问题:插入两张表,非事务,一致性 微博=feed+关系+数字 双向关系:关注与粉丝的交集 实时计算:读的时候计算。 问题:效率 预先计算:写的时候计算,存储 问题:

5、一致性,空间占用 微博=feed+关系+数字 我和ta的共同关注 我关注的人里有多少关注了ta 我的粉丝里有多少关注了ta 。 微博=feed+关系+数字 我们想要的 简单:c/java ,可快速通读代码 可靠:经过验证的 高效:读写速度满足需要 方便实现需求 微博=feed+关系+数字 redis hash : key : user id fi elds : friends ids value : add time 微博=feed+关系+数字 redis hash : hset fromuid.following touid addtime hset touid.follower fromu

6、id addtime hgetAll fromuid. following hgetAll touid.follower ? 姚晨粉丝 11,704,598 Wed Sep 7 21:46:33 CST 2011 微博=feed+关系+数字 hash-max-zip-size 64 - 256,节省近 1/3 内存 cpu 消耗增大 hgetAll cost too much cpu add mc high delay 微博=feed+关系+数字 微博=feed+关系+数字 redis cache ? waste too much mem storage ? rdb may lost data

7、 aof r/w too slow, recover too slow all data in mem, waste money HA : master slave ? NO WAY memory fragment 微博=feed+关系+数字 微博=feed+关系+数字 更新 mysql binlog queue Java Processor redis mysql binlog trigger redis 微博=feed+关系+数字 现状 redisweibo for now: TB 级 growing fast 微博=feed+关系+数字 未来 摇摆巴赫 mysql modifi ed +

8、 innodb following list of a user in one column still under dev 微博=feed+关系+数字 数字 微博=feed+关系+数字 永久计数 用户的 微博,粉丝,关注 我的,我评论的,评论我的 微博 转发,评论 微博=feed+关系+数字 微博=feed+关系+数字 临时计数 小黄签提醒 新粉丝,新,新评论 未读微博 聚合计算 页面js每隔一段时间请求一次 微博=feed+关系+数字 mc + queue + mysql 写入量:mysql 批量插入 mc与mysql不一致 为了提高命中率,mc 空间需要足够大 微博=feed+关系+数字

9、 我们想要的: 大写入量 大读取量 持久化 简单可靠高效 微博=feed+关系+数字 redis k-v , 100 byte per k-v mc 也一样 单个业务十亿量级的数字个数 hash , hget pipeline slow 微博=feed+关系+数字 redis rdb ? may lost data aof ? grow too fast (4G/day) bgsave/bgrewriteaof infl uence parent 微博=feed+关系+数字 微博=feed+关系+数字 redis rolling 场景:微博的评论数 每天写入亿级,每天读取十亿级 明显的时间长尾

10、 目标:将一段时间前的 key 淘汰出去 微博=feed+关系+数字 现状 rediscounter 果爸果爸 array , not linked list malloc all mem when start hash key to position write disk: asyn & slow down add position to aof fi le 未来 rediscounter + innodb auto roll cold data to disk 微博=feed+关系+数字 微博=feed+关系+数字 未读微博数 TimYang 亲自设计算法 XiaoJunHong 实现 向

11、量相减 redis (delay) - mc (throughput) - java hash map 经验教训 准确定位 cache storage 经验教训 适用场景 大量写入 复杂数据结构 简单数据结构+持久化 容量小于内存 经验教训 容量规划 容量增长预估 读/写量预估 数据结构 内存碎片 经验教训 持久化 是否需要 rdb or aof ? 经验教训 高延迟 持久化 rehash 经验教训 HA / Cluster 当前 Redis 本身支持不完美 Jedis 客户端支持不完美 经验教训 CPU 瓶颈 Redis 单线程 hset with big hash-max-zip-size hgetAll 对策:mc 经验教训 扬长避短 内存操作快 磁盘操作慢 偶尔高延迟 可能费内存 Thanks 唐福林 http:/fulin.org Q & A PS. We are hiring ! contact me via 唐福林

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号