简述
热搜排行榜在很多网站上都可以看到,例如:百度热搜、微博热搜、快手抖音热搜等等;那么这个热搜排行榜一般是如何实现的呢?
首先我们可以知道这种热搜排行榜会在网站或者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命令可以给集合内的某个元素增加分数,达到达到热点的目的。