redis实现热搜排行

时间:2021-6-19 作者:qvyue

简述

热搜排行榜在很多网站上都可以看到,例如:百度热搜、微博热搜、快手抖音热搜等等;那么这个热搜排行榜一般是如何实现的呢?
首先我们可以知道这种热搜排行榜会在网站或者app的首页优先展示出来,访问量必然是很高的,如果使用传统的数据库统计,必然会带来严重的性能问题;
这里我们可以使用redis内存数据库来解决高访问量的问题;

数据结构

在redis中有五种常用的数据结构:String、Hash、List、Set、Sorted Set五种;那么哪一种适合做热搜排行榜呢?
其中List可以存储类似队列的数据、Hash则是key-value形式、Set和Sorted Set是有序集合数据;
List更适合做队列和栈,元素先进先出、先进后出的操作;
Hash则是key-value结构,没有顺序也无法实现热搜排名;
Set仅仅只是有序集合,反观Sorted Set会增加一个score(分数)的排名,这么来看Sorted Set就非常适合做热搜排行榜了;

使用方式

Sorted Set常用的命令

#新增多个元素
>zadd database 1 mysql 2 redis 3 mongodb
(integer) 3
#新增一个元素
>zadd database 4 oracle 
(integer) 1
#获取有序集合的成员数
>zcard database
(integer) 4
#集合中指定区间分数的成员数量
>zcount database 0 2
(integer) 2
#指定成员的分数上叠加N
>zincrby database 5 mysql
"6"
#指定区间内成员
>zrange database 0 2
1) "redis"
2) "mongodb"
3) "oracle"
#集合成员位置,分数小位置靠前
>zrank database mysql
(integer) 3
#删除集合中某个元素
>zrem database oracle
(integer) 1
#返回指定排行的元素,分数由大到小
>zrange database 0 10
1) "redis"
2) "mongodb"
3) "mysql"

在这里可以看到,利用redis的zrange命令可以返回热搜排行榜数据,利用zincrby命令可以给集合内的某个元素增加分数,达到达到热点的目的。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。