Redis应用
排行榜
常用操作:
- 添加 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 ...] 每个参与计算的集合的权重。在做交集/并集计算时,每个集合中的 member 会把自己的 score 乘以这个权重,默认为 1。
- aggregate sum|min|max 对于各个集合中的相同元素是 sum(求和)、min(取最小值)还是max(取最大值),默认为 sum。
例如:
亿级用户排行榜
一般面试遇到什么千万条数据、几个 G 文件、上亿的数据啥的,首先想到的方案就是分而治之。
使用不同的key将数据存储到不同的桶中,然后再通过 zcard 这个 O(1) 的命令获取到前面的桶的数量,和所在桶的排行即可。
马太效应
特别是推荐类的排行榜,需要避免马太效应,马太效应指一种强者愈强,弱者愈弱的现象