假设微博热度排行榜是根据点赞数量排名

怎么实现?

可以用Redis的有序集合实现,外层key是固定前缀+排行榜名称,内层value是微博ID,对应的score是点赞数量。每次点赞可以用
zincrby key increment score命令给每条微博增加对应的点赞数量。

大key问题

微博数量很多,如果都放在一个key,那就会产生大key问题。可以把一个key拆分成多个key,比如100个key,每个key只存储一部分微博。然后用一个汇总的key保存排名前N的数据
1)这100个key还是保存在一个Redis中。以lua脚本的方式执行下面的命令

// 写操作
zincrby key_{1-100} increment score;
zincrby key_sort_{N} increment score;
// 如果已经包含N个元素,删除最小的一个
if(zcard key_sort_{N}>N){zremrangebyrank key_sort_{N} 0 0;
}
// 读操作
zrevrange key_sort_{N} 0 -1 WITHSCORES

2)假设这100个key是分布在不同的redis上面。那么就不能使用lua脚本了
同样的思想,拿出一个汇总的key来保存排行前N的数据。
每次写操作后,异步地将这条微博的点赞数量增加到这个汇总的key上面,命令如下:

// lua脚本执行下面2条命令
zincrby key_sort_{N} increment score;
// 如果已经包含N个元素,删除最小的一个
if(zcard key_sort_{N}>N){zremrangebyrank key_sort_{N} 0 0;
}

允许有时候异步线程更新汇总key失败,总不会每次都失败。查询排行前N同上。

拓展

1)不单根据点赞数量排名,还有浏览数量,怎么设计?
2)redis的数据是保存在内存的,如果还没持久化或者说某一段时间里key的排名发生了变化,但还没持久化,redis重启后,会造成用户在前面看到的排行榜和后面看到的排行榜发生了变化,怎么解决?

Redis实现微博热度前100相关推荐

  1. 【Redis】精品面试题100道

    [Redis]精品面试题100道 加个说明:我的初心是Java每个技术栈整理个100道面试题,现在的底子是哪吒的<208道面试题>和敖丙面试题 后续我会把自己有价值的题和面试真题添加进入, ...

  2. 万亿级日访问量下,Redis在微博的9年优化历程

    来自:DBAplus社群 讲师介绍 兰将州,新浪微博核心feed流.广告数据库业务线负责人,主要负责MySQL.NoSQL.TiDB相关的自动化开发和运维,参与Redis.counteservice_ ...

  3. 第四十五期:万亿级日访问量下,Redis在微博的9年优化历程

    Redis在微博内部分布在各个应用场景,比如像现在春晚必争的"红包飞"活动,还有像粉丝数.用户数.阅读数.转评赞.评论盖楼.广告推荐.负反馈.音乐榜单等等都有用到Redis. 作者 ...

  4. 2014年中国开源软件前100名

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...

  5. 阿里万亿级日访问量下,Redis在微博的9年优化历程

    分享概要 1.Redis在微博的应用场景 2.Redis在微博的优化 3.未来展望 一.Redis在微博的应用场景 Redis在微博内部分布在各个应用场景,比如像现在春晚必争的"红包飞&qu ...

  6. 基于Redis的微博计算好友关系

    基于Redis的微博计算好友关系 一.计算好友关系业务场景分析 微博微关系: 共同关注:是计算出阿甘和雷军共同关注的人有哪些? 我关注的人也关注他:是计算出我阿甘关注的人群中,有哪些人同时和我一样关注 ...

  7. GitHub 上排名前 100 的 Objective-C 项目简介

    https://github.com/Aufree/trip-to-iOS/blob/master/Top-100.md http://www.oschina.net/news/61416/githu ...

  8. springboot+redis实现微博热搜排行榜

    springboot+redis实现微博热搜排行榜 技术模拟思路: 采用26个英文字母来实现排行,随机为每个字母生成一个随机数作为score 为了更好的体验,先做几件事: 先初始化1个月的历史数据 定 ...

  9. python爬取微博评论超100页_python爬取新浪微博评论-Go语言中文社区

    简介 爬取微博m站评论.由于api限制只能爬取前100页,如果想要更全数据需爬pc端. 工具 python 3.5 requests库 re库 步骤 1. 登陆保存cookie 首先,打开m.weib ...

最新文章

  1. 微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现
  2. 从五个方面做IT职业规划
  3. Oracle 优化器_访问数据的方法_单表
  4. ubuntu10.0.4使用再生龙还原后在启动时不能正常启动
  5. golang runes 字符串 互转
  6. python自学网站 知乎-如何自学Python拿到25K的薪资?非常感谢这11个站点!
  7. tooctalstring_Java Long类toOctalString()方法的示例
  8. ECSHOP设置默认配送方式和默认支付方式
  9. 章子欣父亲发声:感谢提供帮助的媒体,包括百度
  10. Why String is Immutable or Final in Java
  11. 千里达v1000时速_20速碳纤维山地车千里达V1000评测
  12. 个人所得税计算java版
  13. Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
  14. 科技巨头争相布局物联网 智能家居成争夺主战场
  15. Scrum在大型游戏团队中的应用
  16. 狂神 Docker学习笔记 从基础到进阶 一步到位
  17. iMeta | 浙大蒋超组综述环境暴露组全景景观图
  18. Java中接口如何继承接口呢?
  19. 字节跳动面试:Android-系统预设-App,有什么难的?
  20. 广义相对论基础【3】平移联络

热门文章

  1. React 事件onClick
  2. 一文惊醒梦中人:Python是打开数据科学大门的钥匙 - 思路、心态【附库、练习资源链接】
  3. linux教程第五版知识点,Linux知识点总结
  4. PPT中超好用的快捷键
  5. 发票查验API 发票管理自动化
  6. anaconda能用java嘛_无法用Anaconda打开Jupyter笔记本
  7. 英雄联盟S11直播延迟30秒,这次网友反应有点不太一样
  8. 2023ssm基于微信小程序的家校通系统-JAVA.VUE(论文+开题报告+运行)
  9. Android基于Okhttp3的文件下载工具类
  10. Redis - 1、redis概述和安装