Redis系列六、redis的五种数据结构和相关指令之Sorted Set

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。redis是一种基于键值对(key-value)的内存数据库,redis数据结构可以分为string、hash、list、set、sorted set。

redis的五种数据结构和相关指令之有序集合sorted set

有序集合sorted set

有序集合与集合一样,元素都不能重复;Sorted Set中的每个元素都需要指派一个分数(score),Sorted Set会根据score对元素进行升序排序。如果多个member拥有相同的score,则以字典序进行升序排序。
常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数与集合有联系,不能有重复的成员。


与LIST和SET对比

 

1、常用命令

 

2、增删指令

添加指令

zadd key [NX|XX] [CH] [INCR] score member [score member…]

XX: 仅仅更新存在的成员,不添加新成员。

NX: 不更新存在的成员。只添加新成员。

CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,ZADD返回值只计算新添加成员的数量,注意: 如果和incr一起使用的时候,返回的会是incr的结果。

INCR: 当ZADD指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

zadd user:3 200 james //james的点赞数1, 返回操作成功的条数1
zadd user:3 200 james 120 mike 100 lee// 返回3zadd test:1 nx 100 james   //键test:1必须不存在,主用于添加
zadd test:1 xx incr 200 james   //键test:1必须存在,主用于修改,此时为300
zadd test:1 xx ch incr -299 james //返回操作结果1,300-299=1
zrange test:1 0 -1 withscores  //查看点赞(分数)与成员名

增加分数

zincrby user:3 10 lee     //成员lee的分数加10
zadd user:3 xx incr 10 lee //和上面效果一样

删除指令

zrem user:zan jame mike //返回成功删除2个成员,还剩lee


删除指定排名内的升序元素:

zremrangebyrank user:3 0 1 //分数升序排列,删除第0个与第1个,只剩james


删除指定分数范围的成员

zadd user:5 200 james 120 mike 100 lee//先插入测试数据
zremrangebyscore user:5 100 300     //删除分数在100与300范围的成员
zremrangebyscore user:5 (100 +inf    //删除分数大于100(不包括100),还剩lee

3、查看指令

查看分数

zscore user:3 james     //查看james的点赞数(分数),返回200

查看排名

zrank user:3 james  //返回名次:第3名返回2,从0开始到2,共3名
zrevrank user:3 james //返回0, 反排序,点赞数越高,排名越前

返回指定排名范围的分数与成员

zadd user:4 200 james 120 mike 100 lee//先插入数据
zrange user:4 0 -1 withscores //返回结果如下图

zrevrange user:4 0 -1 withscores   //倒序,结果如下图


返回指定分数范围的成员

zrangebyscore user:4 110 300 withscores //返回120 lee ,200 James, 由低到高 
zrevrangebyscore user:4 300 110 withscores //返回200james 120lee,由高到低zrangebyscore user:4 (110 +inf withscores//110到无限大,120mike 200james 
zrevrangebyscore user:4 (110 -inf withscores//无限小到110,返回100 lee

返回指定分数范围的成员个数:

zcount user:4 110 300  //返回2,由mike120和james200两条数据

统计成员数量

zcard test:1     //计算成员个数, 返回1


4、有序集合交集

格式:

zinterstore destination numkeys key ... [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

destination:交集产生新的元素存储键名称。
numkeys: 要做交集计算的键个数,匹配不上会有语法错误,会执行不了。
key :元素键值。
weights:每个被选中的键对应值乘weight, 默认为1。
初始化数据:

zadd user:7 1 james 2 mike 4 jack 5 kate      //初始化user:7数据
zadd user:8 3 james 4 mike 4 lucy 2 lee  6 jim  //初始化user:8数据

交集例子:

 zinterstore user_jj 2 user:7 user:8 aggregate sum //2代表键合并个数,
//aggregate sum可加也不可加上,因为默认是sum
//结果user_jj:4james(1+3), 6mike(2+4) zinterstore user_jjmax 2 user:7 user:8 aggregate max 或min 
//取交集最大的分数,返回结果 3james  4mike, min取最小

weights的使用:

zinterstore user_jjweight 2 user:7 user:8 weights 8 4 aggregate max
//1,取两个成员相同的交集,user:7->1 james  2 mike;  user:8->3 james  4 mike
//2,将user:7->james 1*8=8,  user:7->mike 2*8 =16, 最后user:7结果 8 james  16 mike; 
//3,将user:8-> james 3*4=12, user:8->mike 4*4=16,最后user:8结果12 james  16 mike
//4,最终相乘后的结果,取最大值为  12 james 16mike
//5, zrange user_jjweight 0 -1 withscores 查询结果为  12 james 16mike


5、有序集合并集(合并去重)

格式:

zunionstore destination numkeys key ... [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

destination:交集产生新的元素存储键名称
numkeys: 要做交集计算的键个数 key :元素键值
weights:每个被选中的键对应值乘weight, 默认为1
eg:

zunionstore user_jjweight2 2 user:7 user:8 weights 8 4 aggregate max
//与以上zinterstore一样,只是取并集,指令一样


6、有序集合应用场景

排行榜系统,如视频网站需要对用户上传的视频做排行榜
点赞数:

zadd user:1:20180106 3 mike  //mike获得3个赞

再获一赞:

zincrby user:1:20180106 1 mike  //在3的基础上加1

用户作弊,将用户从排行榜删掉:

zrem user:1:20180106 mike

展示赞数最多的5个用户:

zrevrangebyrank user:1:20180106  0  4 

查看用户赞数与排名:

zscore user:1:20180106 mike   
zrank user:1:20180106 mike


————————————————
版权声明:本文为CSDN博主「lingengy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/w1lgy/article/details/84377092

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI时代的高科技读心术:算法解码脑中图像

来源:科研圈翻译 李杨,审校 张梦茜,编辑 魏潇让我们想象一下:只要在心里浮现出某个人物或风景,就能从一堆数码照片中把它搜索出来。或者不用动笔就能画出一个新的厨房设计。又或者给心爱的人发送一张想象中的落日照…

《Nature》发布毫米级软体机器人,可在没有任何物理干预情况下游走于人体

转载自公众号:机器人大讲堂概要:一直以来,微型机器人、软体机器人成为科学研究的热点,我们都期盼机器人能听从指挥的到达人体指定位置,在对人体危害最小的情况下递送药物或者切除病变组织。1966年著名作家艾萨克阿西莫…

Nature:寻找记忆的痕迹

来源:神经科技对于不是《神探夏洛克》超级粉丝的人来说,认知神经科学家Janice Chen对这部英国广播公司的热播侦探剧的了解比大多数人多。当观众观看这部电视剧的第一集然后描述其情节时,Chen能在脑部扫描仪的帮助下监视他们的脑子里正在发生什…

tcl linux 刷 安卓系统,安卓用户看过来—手把手教你刷第三方系统

来来来,小葵花课堂讲课啦。孩子咳嗽老不好,多半是废了,打一顿就好。手机卡顿老不好,先别着急,来刷个机吧。众所周知,因为安卓系统自身的特性,安卓手机用久了难免出现卡顿。一般来说解决的方法有…

DeepMind开源Psychlab平台——搭建AI和认知心理学的桥梁(附论文和代码下载)

来源:专知概要:DeepMind近期开源了Psychlab,这是一个利用认知心理学等领域知识来研究受控环境下人工智能体(Artificial Agent)的行为,从而模拟人类的行为。DeepMind近期开源了Psychlab,这是一个…

扩展立方体 The Scale Cube

转自: https://akfpartners.com/growth-blog/scale-cube/ 比例立方体 2018年4月25日| 发布者:Robin McGlothin Scale Cube是用于定义微服务和扩展技术产品的模型。AKF Partners于2007年发明了Scale Cube,最初于2007年在我们的博客上在线发…

人脑动态功能网络连接模式能够鉴别个体并预测其认知功能

来源:神经科技概要:近二十年来,基于静息态功能磁共振影像的人脑连接组学快速发展,为无创研究活体人脑的功能组织规律和网络运作机制提供了重要手段,大大促进了研究者对脑认知、脑发育和脑疾病神经机制的理解。近日&…

JMS之企业消息传送

企业消息传送:消息是通过网络从一个系统异步传送给其他系统的。 客户端:使用消息传送API 的一个业务应用程序或组件(如:JMS) 集中式体系结构 分散式体系结构

达沃斯群英纵论人工智能,核心观点汇总

来源:AI科技大本营概要:一年一度的世界经济论坛年会(达沃斯论坛)上,来自不同领域的精英纷纷发表了自己对于人工智能的看法。一年一度的世界经济论坛年会(达沃斯论坛)已经召开了3天,该…

Java消息服务思维导图笔记

https://www.processon.com/view/link/610b5f201efad40724bdfae2

window计算的chk在linux下可以读,Linux系统命令从入门到完全忘记(四)

系统安全相关命令chmod概要:用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。语法格式:chmod [-cfvR] [–help] [–version] mode file参数:参数说明-c当发生改变时,报告处理信息-f错误信息不输出-R处理指…

三大国有银行同时入股 AI 公司第四范式

来源:新华社概要:人工智能公司第四范式于1月26日宣布完成B+轮融资,并同时宣布获得来自中国工商银行、中国银行、中国建设银行三家国有银行及所属基金的联合战略投资。人工智能公司第四范式于1月26日宣布完成B+轮融资&a…

从语言学到深度学习NLP,一文概述自然语言处理

来源:萤火虫沙龙2概要:自然语言处理(NLP)近来因为人类语言的计算表征和分析而获得越来越多的关注。自然语言处理(NLP)近来因为人类语言的计算表征和分析而获得越来越多的关注。它已经应用于许多如机器翻译、…

Guava RateLimiter限流原理解析

来源:https://zhuanlan.zhihu.com/p/60979444 限流是保护高并发系统的三把利器之一,另外两个是缓存和降级。限流在很多场景中用来限制并发和请求量,比如说秒杀抢购,保护自身系统和下游系统不被巨型流量冲垮等。 限流的目的是通过…

脑洞大开:未来二十年将兴起的88个微型产业

来源:资本实验室概要:目前,我们正在进入一个指数级技术变革的时代。这个时代既催生出前所未有的科技巨头,其实也催生了一个微型创新的新时代。目前,我们正在进入一个指数级技术变革的时代。这个时代既催生出前所未有的…

Web 服务策略断言语言 (WS-PolicyAssertions)

原文:http://www.microsoft.com/china/msdn/library/webservices/webservices/WebServicesPolicyAssertionsLanguage(WS-PolicyAssertions).mspxWeb 服务策略断言语言 (WS-PolicyAssertions) 发布日期: 4/26/2004| 更新日期: 4/26/2004版本 1…

周志华:严肃的研究者就不该去触碰强人工智能

来源:知识分子概要:关于人工智能,长期存在两种不同的目标或者理念。关于人工智能,长期存在两种不同的目标或者理念。一种是希望借鉴人类的智能行为,研制出更好的工具以减轻人类智力劳动,一般称为“弱人工智…

guava限流器RateLimiter原理及源码分析

来源:https://www.cnblogs.com/zhandouBlog/p/11743660.html 前言 RateLimiter是基于令牌桶算法实现的一个多线程限流器,它可以将请求均匀的进行处理,当然他并不是一个分布式限流器,只是对单机进行限流。它可以应用在定时拉取接…

185页深度报告 扒一扒AI金融的老底【附下载】

来源:智东西概要:2016年,中国爆出8家独角兽,总估值964亿美元位冠全球;2017年,毕马威全球百佳金融科技企业前三甲,蚂蚁金服、众安保险、趣店,皆来自中国;过往两年&#xf…

夹娃娃动画Android,手机模拟抓娃娃

手机模拟抓娃娃让你通过手机足不出户也能感受娃娃机的乐趣,萌趣的卡通形象,清新治愈的设计风格,简单上手的玩法,赶快加入进来冲击最高分吧,点击下载手机模拟抓娃娃开始你的挑战!手机模拟抓娃娃介绍手机模拟抓娃娃游戏是一款模拟进行的真人在线抓娃娃的掌上控制的休闲…