参考链接
最简单的实现方式,通常性能不会很好
ORDER BY 关键字可以使查询返回的「结果集」按照指定的列进行排序,可以按照某「一列」排序或者同时按照「多列」进行排序,排序的顺序可以是「升序」或者「降序」。
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;
窗口函数中的顺序函数,通常性能也不会很好
窗口函数 | 效果 |
---|---|
ROW_NUMBER() | 顺序排序 |
RANK() | 并列排序,会跳过重复的序号,比如序号为1、1、3 |
DENSE_RANK() | 并列排序,不会跳过重复的序号,比如序号为1、1、2 |
value 是一个集合,且可以看出这个集合是有序的。集合中的每一个 member 都有一个 score,然后按照这个 score 进行降序排序。
添加member
zadd key score member [score member ...]
增加 member 的 score
zincrby key increment member
获取 member 排名
默认是升序排列
zrank/zrevrank key member
返回指定排名范围内的 member
zrange/zrevrange key start end [withscores]
对一段日期的排行榜做并集,得到一段日期的数据的总体排行榜数据;
对一段日期的排行榜做交集,得到一段日期的数据的总体排行榜数据(排除期间中断上榜的信息);
获取交集/并集
zinterstore/zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]
分治算法处理,将单个排行榜分为多个排行榜处理(桶),但落点并不均匀,设计算法解决马太效应(强者愈强,弱者愈弱)
利用定时任务,获取统计完的排行榜数据,将数据缓存至临时表(或缓存);当客户端调用获取排行榜接口时直接返回临时表(或缓存)数据。
使用redis的string做缓存,自定义key,value为json数据