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

薛兰
• 阅读 3956

上一篇: redis学习笔记之-(5)-list(栈/队列/阻塞队列)


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有几个
点赞
收藏
评论区
推荐文章
把帆帆喂饱 把帆帆喂饱
2年前
Redis入门
Redis1、Redis概述Redis介绍Redis是一个开源的keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset–有序集合)和
Aimerl0 Aimerl0
4年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
Django 之redis的应用
redis概述redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表队列和栈,set集合,sortedset有序集合,hash(hash表))
Stella981 Stella981
3年前
Redis的8大数据类型,写的真好
!(https://oscimg.oschina.net/oscnet/fdbd36b977d2445d818bea697ac004ac.jpg)来源|blog.itzhouq.cn/redis2最近这几天的面试每一场都问到了,但是感觉回答的并不好,还有很多需要梳理的知识点,这里通过几篇Redis笔记整个梳理一遍。Re
Stella981 Stella981
3年前
Redis常用命令
Redis常用命令Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)等https://gitee.com/nmwork/RedisUtil(https://gitee.com/nmwork/RedisUtil)1.  Redis数
Wesley13 Wesley13
3年前
IM 消息服务架构
IM消息架构主要有1、消息redis缓存队列及用户信息memcache2、消息的数据落地(入库mysql)3、消息的发送4、离线消息服务5、过期消息服务消息redis缓存队列服务端落地队列1.客户端通过HTTPS
Stella981 Stella981
3年前
Redis常见问题
1、什么是Redis?回答:Redis是一个基于内存的高性能keyvalue数据库;应用场景:1)会话缓存(SessionCache)2)全页缓存(FPC)3)队列4)排行榜/计数器5)发布/订阅2、使用Redis有哪些好处?回答:1)速度快,因为数据存在内存中,类似于HashMap,HashM
Stella981 Stella981
3年前
Redis命令行之Zset
一、Redis之Zset简介1\.有序集合Zset是String类型的有序集合。2\.Zset中每个元素都会关联一个double类型的分数值,redis通过分数值来为集合中所有成员进行从小到大排序。3\.Zset的成员是唯一的,但分数值可以重复。4\.Zset是通过hash表实现的,添加、删除、查找的复杂度都是O(1)。5
Wesley13 Wesley13
3年前
Java工程师之Redis实战系列教程前言&目录
系列前言Java工程师之Redis实战系列教程,同其他教程一样,均是在下学习笔记,本系列主要参考自《Redisinaction》,将书本中的有趣的例子转化为能解决特定问题的示例程序,所有的核心章节均提供示例源码在javacourseredisinaction(https://www.oschina.net/action/GoToLi
Stella981 Stella981
3年前
Redis基本数据结构总结之SET、ZSET和HASH
原文:Redis基本数据结构总结之SET、ZSET和HASH(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2FGeorge1994%2Fp%2F7191011.html)Redis基本数据结构总结前言Re
Stella981 Stella981
3年前
Redis(四)——消息队列
Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。\\性质:\\由于Redis的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。所以可以直接使用Redis的List实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop。(列表常用命令)R
薛兰
薛兰
Lv1
不是我不想找你,只是我觉得你不需要我。
文章
2
粉丝
0
获赞
0