Redis学习_2_数据类型_5_sorted_set

sorted_set介绍与基本操作

关于sorted_set

sorted_set产生的原因:需要一种新的存储结构,来保存可以按一定规则排序的数据。
sorted_set的实现:在set的基础上,加一个用于排序的字段,这个字段可以是整数也可以是小数:
Redis学习_2_数据类型_5_sorted_set

基本操作

  • 添加数据:zadd key score1 member1 [score2 member2 ...],如zadd stu 64 tom 86 jam
  • 获取全部数据(score从小到大排序):zrange key start stop [withscores],如zrange stu 0 -1 withscores,这个就是查stu这个数据结构中的所有数据,0为起始位置,-1为最后一个,[withscores]这个参数代表的就是是否显示score字段。
  • 获取全部数据(score从大到小排序):zrevrange key start stop [withscores],如zrevrange stu 0 -1 withscores,这个和上一个仅仅是排序顺序相反。
  • 删除数据:zrem member1 [member2 ...],如zrem stu jam
  • 按条件获取数据(从小到大):zrangebyscore key min max [withscores] [limit offset count],如zrangebyscore stu 60 100 withscore limit 2 2,代表取stu里60到100的数据,且用limit限制数量:从下标’offset’开始,取’count’个。
  • 按条件获取数据(从大到小):zrevrangebyscore key max min [withscores] [limit offset count],如zrevrangebyscore stu 100 60 withscores limit 1 2,除了顺序和上一个命令相反,其他都一样。
  • 根据索引删除数据:zremrangebyrank key start stop,如zremrangebyrank stu 0 2,删除下标为0到2的数据。
  • 根据score删除数据:zremrangebyscore key min max,如zremrangebyscore stu 40 60,删除40-60这个范围的数据。
  • 获取集合数据总量:zcard key,如zcard stu
  • 获取指定范围内的数量:zcount key min max,如zcount stu 80 100
  • 集合取交集:zinterstore destination numkeys key [key ...] [weights weight] [aggregate sum|min|max],如zinterstore stu 3 stu1 stu2 stu3,操作完后可以看一下stu里面的数据,这个是把这几个集合中相交的部分的score都加起来了,如果不要相加,要最大值、最小值也可以,就用aggregate参数。
  • 集合取并集:zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX],如zunionstore stu 3 stu1 stu2 stu3,这个和上一条命令相似,不再详细记录。

sorted_set扩展操作

  • 取数据的索引(从小到大):zrank key member,如zrank stu jam
  • 取数据的索引(从大到小):zrevrank key member,如zrevrank stu jam
  • 获取score字段的值:zscore key member,如zscore stu jam
  • 修改score字段的值:zincrby key increment member,如zincrby stu 20 jam

sorted_set注意事项

  • score的存储空间是64位。
  • score可以存小数,精度位double的精度,不是十分准确,使用要慎重。
  • sorted_set的底层还是set,因此数据不能重复,如果重复写入,score保存的是最后一次的数据。

sorted_set的应用

  • 排行榜的实现
    根据对score字段的操作,我们可以对排名依据的数据做控制,同时又可以依靠sorted_set的排序功能实现排行。
  • 实现时效性任务管理
    举个日常的例子,我们开B站大会员,勾选了自动续费,这么多人,怎么就知道今天谁谁谁大会员要到期了,谁谁谁要自动续费呢,可以用sorted_set,我们在score字段存到期日或者自动续费日,每天刷新一次数据,如果今天有到期的或者要续费的,就从sorted_set里取出来,提醒他到期或者自动续费,如果是自动续费,修改score后重新存入sorted_set。
  • 带有权重的任务管理
    对于商家来说,可能有的客户出手阔绰,一掷千金,那商家肯定要优先服务这个大金主爸爸,其他一般的客户稍稍往后排,这个就体现出各个客户的优先级,也就是权重不一样,至于怎么体现这个权重呢,还是根据sorted_set的排序功能,可以倒着排序,权重越大的客户在最前面,从而享受更优质的服务。