0%

redis学习笔记之-(6)-zset集合(排行榜-topN)

redis学习笔记之-(6)-zset集合(排行榜-topN)

6.1 排行榜/topN基本命令

  • 加入成员: zadd key score member
  • 查询成员: zrange key start stop [withscores] 注: start = 0 end = -1 注: start/end都包含
  • 删除成员: zrem key member
  • 查看某个成员的 score: zscore key member
  • 增加某个成员的score: zincrby key increment member
  • 查看结合的size: zcard key
  • 查看topN/倒叙: zrevrange key start stop [withscores] 注: start/end都包含

6.2 案例1: 图书销量榜(books)

1. 添加成员

127.0.0.1:6379> zadd books 1 Python编程
1
127.0.0.1:6379> zadd books 2 数学之美
1
127.0.0.1:6379> zadd books 3 浪潮之巅
1
127.0.0.1:6379> zadd books 4 机器学习
1
127.0.0.1:6379> zadd books 5 深入理解Java虚拟机
1
127.0.0.1:6379> zadd books 6 鸟哥的Linux私房菜
1
127.0.0.1:6379> zadd books 7 算法(第4版)
1
127.0.0.1:6379> zadd books 8 'C Primer Plus'
1
127.0.0.1:6379> zadd books 9 "Head First Java(中文版)"
1
127.0.0.1:6379> zadd books 10 Java编程思想(第4版)
1
127.0.0.1:6379> zadd books 11 "C++ Primer中文版(第5版)"
1
127.0.0.1:6379> zadd books 12 计算机网络:自顶向下方法(原书第7版)
1
 

2. 查询所有books成员=>带分数

127.0.0.1:6379> zrange books 0 -1 withscores
Python编程
1
数学之美
2
浪潮之巅
3
机器学习
4
深入理解Java虚拟机
5
鸟哥的Linux私房菜
6
算法(第4版)
7
C Primer Plus
8
Head First Java(中文版)
9
Java编程思想(第4版)
10
C++ Primer中文版(第5版)
11
计算机网络:自顶向下方法(原书第7版)
12

3. 删除books中成员: ‘C Primer Plus’

127.0.0.1:6379> zrem books 'C Primer Plus'
1
127.0.0.1:6379> zrange books 0 -1 withscores ## 查询所有成员=>带分数
Python编程
1
数学之美
2
浪潮之巅
3
机器学习
4
深入理解Java虚拟机
5
鸟哥的Linux私房菜
6
算法(第4版)
7
Head First Java(中文版)
9
Java编程思想(第4版)
10
C++ Primer中文版(第5版)
11
计算机网络:自顶向下方法(原书第7版)
12

4. 单独查看books成员score

127.0.0.1:6379> zscore books 数学之美 ## 查看'数学之美'成员的 score
2

5. 增加books中成员排名score

127.0.0.1:6379> zincrby books 20 数学之美
22
127.0.0.1:6379> zscore books 数学之美
22

6. 查看books成员总数

127.0.0.1:6379> zcard books # 查看集合size
11

7. 查看books榜单top5

127.0.0.1:6379> zrevrange books 0 4 withscores # 逆序查看 topN => start=0 stop=4
数学之美
22
计算机网络:自顶向下方法(原书第7版)
12
C++ Primer中文版(第5版)
11
Java编程思想(第4版)
10
Head First Java(中文版)
9
127.0.0.1:6379>

6.3 案例2: 热榜新闻

2020年8月一组新闻: rank:202008

2020年9月一组新闻: rank:202009

点击新闻(增加热度), 增加score: zincrby key news:20201001 1

1. 增加新闻条目(8月): rank:202008

127.0.0.1:6379> zadd rank:202008 1 恭喜!潘玮柏晒全家照宣布结婚 
1
127.0.0.1:6379> zadd rank:202008 1 TikTok正式起诉美国政府
1
127.0.0.1:6379> zadd rank:202008 1 员工不喝领导敬酒被打耳光辱骂
1
127.0.0.1:6379> zadd rank:202008 1 上节目时遭观众现场举报
1
127.0.0.1:6379> zadd rank:202008 1 罕见!新华社3.1万字长文逐条批蓬佩奥演讲
1
127.0.0.1:6379> zadd rank:202008 1 《八佰》票房破十亿
1
127.0.0.1:6379> zadd rank:202008 1 华语影史第6位!张译主演电影票房破百亿
1
127.0.0.1:6379> zadd rank:202008 1 外媒:博尔特新冠检测呈阳性
1
127.0.0.1:6379> zadd rank:202008 1 "面对美方天价罚金 字节跳动选择和解"
1
127.0.0.1:6379> zadd rank:202008 1 1个蚂蚁金服估值相当于4个SpaceX
1

2. 查看总条数(8月)

127.0.0.1:6379> zcard rank:202008 
10

3. 用户点击新闻(8月)

127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
2
127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
3
127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
4
127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
5
127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
6
127.0.0.1:6379> zincrby rank:202008 1 TikTok正式起诉美国政府
7
127.0.0.1:6379> zincrby rank:202008 1 1个蚂蚁金服估值相当于4个SpaceX
2
127.0.0.1:6379> zincrby rank:202008 1 1个蚂蚁金服估值相当于4个SpaceX
3
127.0.0.1:6379> zincrby rank:202008 1 1个蚂蚁金服估值相当于4个SpaceX
4
127.0.0.1:6379> zincrby rank:202008 1 《八佰》票房破十亿
2
127.0.0.1:6379> zincrby rank:202008 1 《八佰》票房破十亿
3

4. 查看新闻热点前三(8月)

127.0.0.1:6379> zrevrange rank:202008 0 2
TikTok正式起诉美国政府
1个蚂蚁金服估值相当于4个SpaceX
《八佰》票房破十亿
127.0.0.1:6379> zrevrange rank:202008 0 2 withscores
TikTok正式起诉美国政府
7
1个蚂蚁金服估值相当于4个SpaceX
4
《八佰》票房破十亿
3

5. 新增一组新闻(9月) rank:202009

127.0.0.1:6379> zadd rank:202009 1 阿里巴巴合伙人胡喜正式离职
1
127.0.0.1:6379> zadd rank:202009 1 新一线城市居住报告
1
127.0.0.1:6379> zadd rank:202009 1 驴友被挂瀑布追踪
1
127.0.0.1:6379> zadd rank:202009 1 上海一公司要求员工产假期间每天手写心得
1
127.0.0.1:6379> zadd rank:202009 1 伪造清华录取书考生离家出走
1
127.0.0.1:6379> zadd rank:202009 1 女孩高考超本一线132分不敢算学费
1
127.0.0.1:6379> zadd rank:202009 1 越南美女花720万建800㎡别墅
1
127.0.0.1:6379> zadd rank:202009 1 "失联45天,95后男孩独自骑行可可西里"
1
127.0.0.1:6379> zadd rank:202009 1 消息称谷歌工程师每日工时不到6小时
1
127.0.0.1:6379> zadd rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
1
127.0.0.1:6379> zcard rank:202009
10
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
2
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
3
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
4
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
5
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
6
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
7
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
8
127.0.0.1:6379> zincrby rank:202009 1 驴友被挂瀑布追踪
9
127.0.0.1:6379> zincrby rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
2
127.0.0.1:6379> zincrby rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
3
127.0.0.1:6379> zincrby rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
4
127.0.0.1:6379> zincrby rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
5
127.0.0.1:6379> zincrby rank:202009 1 腾讯等大厂抛弃35岁员工如扔药渣
6
127.0.0.1:6379> zincrby rank:202009 1 女孩高考超本一线132分不敢算学费
2
127.0.0.1:6379> zincrby rank:202009 1 女孩高考超本一线132分不敢算学费
3
127.0.0.1:6379> zincrby rank:202009 1 女孩高考超本一线132分不敢算学费
4
127.0.0.1:6379> 

6. 9月增加一条与8月有重复的新闻

127.0.0.1:6379> zadd zrank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
1
127.0.0.1:6379> zscore zrank:202009 1个蚂蚁金服估值相当于4个SpaceX
1
127.0.0.1:6379> zincrby rank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
1
127.0.0.1:6379> zincrby rank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
2
127.0.0.1:6379> zincrby rank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
3
127.0.0.1:6379> zincrby rank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
4
127.0.0.1:6379> zincrby rank:202009 1 1个蚂蚁金服估值相当于4个SpaceX
5
127.0.0.1:6379> 

7. 查看8月和9月共同的新闻交集(相同成员score会sum加起来)

zinterstore destination numkeys key1 [key2…]

numkeys 指明: 要求交集的集合有几个

127.0.0.1:6379> zscore rank:202008 1个蚂蚁金服估值相当于4个SpaceX
4
127.0.0.1:6379> zscore rank:202009 1个蚂蚁金服估值相当于4个SpaceX
5
127.0.0.1:6379> zinterstore rank:20200809 2 rank:202008 rank:202009
1
127.0.0.1:6379> zrange rank:20200809 0 -1 # 查看所有集合内元素
1个蚂蚁金服估值相当于4个SpaceX
127.0.0.1:6379> zrange rank:20200809 0 -1 withscores # 查看所有集合内元素 withscores
1个蚂蚁金服估值相当于4个SpaceX
9
127.0.0.1:6379> 

可以看到, 两个有序集合zset求出交集, 分数会sum;

8. 查看8月和9月新闻的并集(相同成员score会sum加起来)

zunionstore destination numkeys key1 [key2…]

127.0.0.1:6379> zunionstore rank:20200809:union 2 rank:202008 rank:202009
20
127.0.0.1:6379> zrevrange rank:20200809:union 0 -1 withscores
驴友被挂瀑布追踪
9
1个蚂蚁金服估值相当于4个SpaceX
9
TikTok正式起诉美国政府
7
腾讯等大厂抛弃35岁员工如扔药渣
6
女孩高考超本一线132分不敢算学费
4
《八佰》票房破十亿
3
面对美方天价罚金 字节跳动选择和解
1
阿里巴巴合伙人胡喜正式离职
1
越南美女花720万建800㎡别墅
1
罕见!新华社3.1万字长文逐条批蓬佩奥演讲
1
消息称谷歌工程师每日工时不到6小时
1
新一线城市居住报告
1
恭喜!潘玮柏晒全家照宣布结婚
1
失联45天,95后男孩独自骑行可可西里
1
外媒:博尔特新冠检测呈阳性
1
员工不喝领导敬酒被打耳光辱骂
1
华语影史第6位!张译主演电影票房破百亿
1
伪造清华录取书考生离家出走
1
上节目时遭观众现场举报
1
上海一公司要求员工产假期间每天手写心得
1
127.0.0.1:6379>

9. 小结-zset命令

  • zadd key score member

  • zrange key start stop [withscores]

  • zrevrange key start stop [withscores]

  • zrem key member

  • zscore key member

  • zincrby key increment member

  • zcard key

  • zinterstore destination numkeys key1 [key2…]

  • zunionstore destination numkeys key1 [key2…]

    numkeys 指明: 要求交/并集的集合key有几个