sorted set 数据类型的应用场景

1.简介

  在 set 的基础上给集合中每个元素关联了一个分数,往有序集合中插入数据时会自动根据这个分数排序。它保留了元素不能重复的特性,并且元素是有序的。

2.基本操作

zadd key score member  //score是可以重复的,添加key的时候指定分数
zcard key //计算成员个数
zscore key member //计算某个成员的分数
zrank key member //计算成员排名,从低到高
zrevrank key member //计算成员排名,从高到低
zrem key member [member...]  //删除成员
zincrby key increnment member //增加成员的分数
zrange key start end [withscores]  //从低到高返回指定排名的分数
zrevrange key start end [withscores]  //从高到低返回

zrangebyscore key min max [withscores] [limit offset count] //按照分数从低到高返回
zrevrange score  key min max [withscores] [limit offset count] //按照分数从高到低返回成员

withscore 代表返回的时候带上成员的分数

...还有求交集,并集等操作

3.应用场景

  在集合类型的场景上加入排序就是有序集合的应用场景了。

(1)根据好友的亲密度排序显示好友列表。

// 用元素的分数(score)表示与好友的亲密度
zadd user:kobe 80 james 90 wade  85 melo  90 paul

// 根据亲密度给好友排序
zrevrange user:kobe 0 -1

/**
 * 输出:
 *      1) "wade"
 *      2) "paul"
 *      3) "melo"
 *      4) "james"
 */
 
// 增加好友的亲密度
zincrby user:kobe 15 james

// 再次根据亲密度给好友排序
zrevrange user:kobe 0 -1

/**
 * 输出:
 *      1) "james"
 *      2) "wade"
 *      3) "paul"
 *      2) "melo"
 */
 
 //类似的需求还出现在根据文章的阅读量或点赞量对文章列表排序

(2)排行榜

实效性

从排行榜的实效性上划分,主要分为:

  • 实时榜:基于当前一段时间内数据的实时更新,进行排行。例如:当前一小时内游戏热度实时榜,当前一小时内明星送花实时榜等

  • 历史榜:基于历史一段周期内的数据,进行排行。例如:日榜(今天看昨天的),周榜(上一周的),月榜(上个月的),年榜(上一年的)

业务数据类型

从需要排行的数据类型上划分,主要分为:

  • 单类型数据排行榜:是指需要排行的主体不需要区分类型,例如,所有用户积分排行,所有公贡献值排行,所有游戏热度排行等

  • 多类型(复合类型)数据排行榜:是指需要排行的主体在排行中要求有类型上的区分,例如:竞技类游戏热度排行、体育类游戏热度排行、MOBA类游戏操作性排行、角色/回合/卡牌三类游戏热度排行等

展示唯度

从榜单的最终展示唯度上划分,主要分为:

  • 单唯度:是指选择展示的排行榜就是基于一个唯度下的排行,例如前面提到的MOBA类游戏操作性排行榜,就仅展示所有MOBA类游戏按操作性的评分排行

  • 多唯度:是指选择展示的排行榜还有多种唯度供用户选择,仍然以前面的MOBA类游戏为例,唯度除了操作性,还有音效评分排行,难易度评分排行,画面评分排行等。

展示数据量

从需要展示的数据量上划分,主要分为:

  • topN数据:只要求展示topN条排行纪录,例如:最火MOBA游戏top20

  • 全量数据:要求展示所有数据的排行,例如:所有用户的积分排行

 

 

 

最新回复(0)
/jishukiC26ar1Q7lZNdDJO_2B_2Fi69tyrzMZjDLXp4eYpQ4tzoI_3D4488432
8