【面试题】微博、百度等大厂的排行榜如何实现?

news2025/6/26 14:58:16

背景

现如今每个互联网平台都会提供一个排行版的功能,供人们预览最新最有热度的一些消息,比如百度:


再比如微博:

我们要知道,这些互联网平台每天产生的数据是非常大,如果我们使用MySQL的话,db实现小时、天、周、月的排行榜,难度及其大,而且表结构的设计也非常难,再者db也打不住这么大的并发量。

技术方案

所以高并发实时的排行榜天然适合用redis来实现。

那我们该用什么数结构呢?

正好,redis中有一个zset数据结构,刚好可以用来排序,下面说一下整体思路:
整体的技术实现是采用redis的zset来实现,每条微博是一个member,每条微博的热度值为一个score。
这里的score就和好评判了,每个平台有自己的阶段规则,比如给点赞、评论、转发,分别给出不同的评分权重,根据用户的行为来给这些一条数据加上不同的分数,然后排序。

好的,解决了数据选型以后,还需要思考:那如何把小时、天、周、月的数据,实时计算呢?

我们可能把所有数据放在一个Key里边吧,这样会造成redis的大key,导致性能受到影响,所以我们可以
以小时为单位,即每个小时为一个zset近24小时,就合并24个zset近7天,就合并247个zset,近30天(月),就合并2430个zset,这样我们得到了最近一小时、最近一天、最近七天的排行榜,乔碧萝看了都直呼哥哥好屌

有了上面的思路以后我们再继续思考一个问题:如何实现以每个小时为一个zset?如何把时间切割为小时?

其实:先把当前的时间转换为为毫秒的时间戳,然后除以一个小时,即当前时间T/10006060=小时key,然后用这个小时序号作为zset的key。
例如:
2020-01-12 15:30:00=1578814200000毫秒转换小时key=1578814200000/1000*60*60=438560

2020-01-12 15:59:00=1578815940000毫秒转换小时key=1578815940000/1000*60*60=438560
2020-01-12 16:30:00=1578817800000毫秒转换小时key=1578817800000/1000*60*60=438561
剩下的以此类推有了这个思路,剩下的工作就是每次某个微博热度有变化,先计算当前的小时key,然后把当前的微博作为member,热度值作为score,加入zset中。

这里的操作其实也很好理解,就是一个简单的计算机的“取模”运算,同一个小时转化为毫秒以后不断取整以后,整数部分一定相同!

总结

至此我们已经知道了微博、百度得排行版是如何实现的,举一反三,大多大数据量下的排序我们都可以参考此实现方案!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用R语言计算矩形分布(均匀分布)并绘制图形

理论部分 矩形分布(均匀分布),是指在某一区间内,随机变量取任何值的概率都是相同的。这种分布的概率密度函数在一个特定的区间内是一个常数,因此其图形呈现出一个矩形的形状,故得名为“矩形分布”。在概率…

智能边缘自动化:HDMI接口钡铼ARM工业电脑实践案例

一款具备HDMI接口的高性能ARM工业计算机应运而生,为实现在工业4.0时代的关键数据实时处理与可视化管理提供了强有力的硬件支撑。这款计算机依托其独特的边缘计算能力,完美解决了工业环境中大规模数据传输至云端的高延迟问题,成功实现了OT&…

酷开科技在大数据及人工智能推动下,成功将酷开系统与AI融合

随着科技的不断发展,以及大数据这个概念的出现,让看似冷冰冰的数字开始具备了温度,开始让数字产生了温暖的价值,也让各个行业看到了大数据的作用。酷开科技生态的核心场景是家庭、是客厅,无论是以酷开科技为代表的OTT&…

电压继电器SRMUVS-220VAC-2H2D 导轨安装 JOSEF约瑟

系列型号: SRMUVS-58VAC-2H欠电压监视继电器;SRMUVS-100VAC-2H欠电压监视继电器; SRMUVS-110VAC-2H欠电压监视继电器;SRMUVS-220VAC-2H欠电压监视继电器; SRMUVS-58VAC-2H2D欠电压监视继电器;SRMUVS-100…

找不到vcruntime140.dll怎么办,vcruntime140.dll丢失的多种解决方法

在我们日常频繁地与电脑打交道、依赖其处理各种工作、学习乃至娱乐任务的过程中,偶尔会遭遇一些令人困扰的技术问题。其中一种颇为常见的情况便是,当您正全神贯注于某个重要应用的操作,或是满怀期待地试图启动一款新安装的游戏时,…

蓝桥杯刷题 二分-[2145]求阶乘(C++)

问题描述 满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1。 输入格式 一个整数 K。 输出格式 一个整数代表答案。 样例输入 2 样例输出 10 评测用例规模与约定 对于 30% 的数据,1 ≤ K ≤ 10的6次方 对于 100% 的数据&…

ES6对于Class类的基本语法详解(2024-04-10)

目录 1、传统ES5写法 2、ES6 的class语法 3、ES5与ES6行为对比 4、类的constructor() 方法 5、类的实例 new 6、类的对象属性(新写法) 7、类的取值函数(getter)和存值函数(setter) 8、Class类的表达…

用vue3写一个AI聊天室

效果图如下&#xff1a; 1、页面布局&#xff1a; <template><div class"body" style"background-color: rgb(244, 245, 248); height: 730px"><div class"container"><div class"right"><div class"…

SpringBoot3 + uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作(最新)

SpringBoot3 uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作 最终效果图uniapp 的源码UpLoadFile.vuedeleteOssFile.jshttp.js SpringBoot3 的源码FileUploadController.javaAliOssUtil.java 最终效果图 uniapp 的源码 UpLoadFile.vue <tem…

Netty出坑记

NIO&#xff1a; 一个线程处理多个请求 BIO&#xff1a; 阻塞 netty 编码解码 TFO&#xff1a; 校验cookie合法性&#xff0c;不合法 TCP流程 设计QQ&#xff1a; 登录过程&#xff0c;client TCP协议向server发送信息&#xff0c;HTTP协议下载信息 发消息&#xff1a;clie…

Win10系统VScode远程连接VirtualBox安装的Ubuntu20.04.5

1.打开虚拟机&#xff0c;在中端中输入命令: sudo apt-get install openssh-server 安装ssh 我这里已经安装完成&#xff0c;故显示是这样 2.输入命令&#xff1a;sudo systemctl start ssh 启动远程连接 注意&#xff0c;如果使用VirtualBox安装的虚拟机&#xff0c;需要启用…

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波…

【Qt 学习笔记】QWidget的geometry属性及window frame的影响

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的geometry属性 文章编号&#xff1a;Qt 学习笔记 / 16 文章目…

Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

【现代C++】默认函数和删除函数

现代C中的默认函数和删除函数特性允许开发者更精确地控制类的行为&#xff0c;特别是关于对象拷贝、赋值、析构和构造的行为。这些特性可以帮助开发者避免不必要的对象拷贝&#xff0c;防止资源泄露&#xff0c;以及避免一些常见的编程错误。 1. 默认函数&#xff08;Defaulte…

docker 安装canal

一、新建文件夹 新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml canal.propertie 修改如下&#xff1a; 修改instance.properties内容如下 1.1 canal.properties ################################################# ######### …

ES6 关于Class类的继承 extends(2024-04-10)

1、简介 类Class 可以通过extends关键字实现继承&#xff0c;让子类继承父类的属性和方法。extends 的写法比 ES5 的原型链继承&#xff0c;要清晰和方便很多。 class Foo {constructor(x, y) {this.x x;this.y y;console.log(父类构造函数)}toString() {return ( this.x …

42-软件部署实战(下):IAM系统安全加固、水平扩缩容实战

IAM应用安全性加固 iam-apiserver、iam-authz-server、MariaDB、Redis和MongoDB这些服务&#xff0c;都提供了绑定监听网卡的功能。将服务绑定到内网网卡上。 我们也可以通过iptables来实现类似的功能&#xff0c;通过将安全问题统一收敛到iptables规则&#xff0c;可以使我…

基于GAN的图像补全实战

数据与代码地址见文末 论文地址:http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf 1.概述 图像补全,即补全图像中的覆盖和缺失部分, 网络整体结构如下图所示,整体网络结构还是采取GAN,对于生成器,网络结构采取Unet的形式,首先使用卷积…

Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库

背景 .NET 中 有没有类似 Java 中 Feign 这样的框架&#xff1f;经过查找和实验&#xff0c;发现 在 .NET 平台上&#xff0c;虽然没有直接的 Feign 框架的端口&#xff0c;但是有一些类似的框架和库&#xff0c;它们提供了类似的功能和设计理念。下面是一些在 .NET 中用于声明…