有序集合sortedset

一特点

1、有序、去重

2、元素是字符串类型

3、每个元素都关联着一个浮点数分值(score),并按照分支从小到大的顺序排列集合中的元素(分值可以相同)

4、最多包含2^32-1元素

示例1:一个保存了水果价格的有序集合

分值

2.0

4.0

6.0

8.0

元素

西瓜

葡萄

芒果

香蕉

示例2:一个保存了员工薪水的有序集合

分值

6000

8000

10000

12000

元素

lucy

tom

jim

jack

示例3:一个保存了正在阅读某些技术书的人数

分值

300

400

500

600

元素

核心编程

数据库

django

redis

二命令汇总

#在有序集合中添加一个成员

zadd key score member#查看指定区间元素(升序)

zrange key start stop [withscores]#查看指定区间元素(降序)

ZREVRANGE key start stop [withscores]#查看指定元素的分值

ZSCORE key member#返回指定区间元素#offset : 跳过多少个元素#count : 返回几个#小括号 : 开区间 zrangebyscore fruits (2.0 8.0

zrangebyscore key min max [withscores] [limit offset count]#删除成员

zrem key member#增加或者减少分值

zincrby key increment member

值 成员#返回元素排名

zrank key member#返回元素逆序排名

zrevrank key member#删除指定区间内的元素

zremrangebyscore key min max#返回集合中元素个数

zcard key#返回指定范围中元素的个数

zcount key min max

zcount fruits4 7zcount fruits (4 7 4

(4 (7 4

#并集

zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]#有几个集合numkeys就是几 权重值也要相应的给几个#交集:和并集类似,只取相同的元素

ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM|MIN|MAX

三操作命令演示

1.查看: 指定索引区间元素(升序)

zrange key start stop [withscores]

127.0.0.1:6379> ZRANGE salary 0 -1

1) "lucy"

2) "tom"

3) "jim"

4) "jack"

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "lucy"

2) "6000"

3) "tom"

4) "8000"

5) "jim"

6) "10000"

7) "jack"

8) "12000"

2.查看: 指定索引区间元素(降序)

ZREVRANGE key start stop [withscores]

3.显示指定元素的分值

ZSCORE key member

127.0.0.1:6379>zscore salary jack"14000"

4.返回指定区间元素

zrangebyscore key min max [withscores] [limit offset count]

offset : 跳过多少个元素

count : 返回几个

小括号 : 开区间 zrangebyscore fruits (2.0 8.0

127.0.0.1:6379> ZRANGEBYSCORE salary (8000 12000

1) "jim"

2) "jack"

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "lucy"

2) "6000"

3) "tom"

4) "8000"

5) "jim"

6) "10000"

7) "jack"

8) "12000"

5.删除

zrem key member

127.0.0.1:6379>ZREM salary jim

(integer)1

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "lucy"

2) "6000"

3) "tom"

4) "8000"

5) "jack"

6) "12000"

6.增加或者减少分值

zincrby key increment member

127.0.0.1:6379> ZINCRBY salary 2000jack"14000"

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "lucy"

2) "6000"

3) "tom"

4) "8000"

5) "jack"

6) "14000"

7.返回元素的排名(索引)

zrank key member

127.0.0.1:6379>zrank salary jack

(integer)2

8.返回元素逆序排名

zrevrank key member

127.0.0.1:6379>ZREVRANK salary jack

(integer) 0127.0.0.1:6379>ZREVRANK salary lucy

(integer)2

9.删除指定区间内的元素

zremrangebyscore key min max

127.0.0.1:6379> ZREMRANGEBYSCORE salary 4000 6000(integer)1

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "tom"

2) "8000"

3) "jack"

4) "14000"

10.返回集合中元素个数

zcard key

127.0.0.1:6379>ZCARD salary

(integer)2

11.返回指定范围中元素的个数

zcount key min max

zcount fruits 4 7

zcount fruits (4 7

127.0.0.1:6379> ZRANGE salary 0 -1withscores1) "tom"

2) "8000"

3) "jack"

4) "14000"

127.0.0.1:6379> zcount salary 8000 14000(integer)2

#不包含8000,包含14000

127.0.0.1:6379> zcount salary (8000 14000(integer)1

12.并集

zunionstore destination numkeys key [weights ] [AGGREGATE SUM|MIN|MAX]

127.0.0.1:6379> zadd stu_score1 60 tom 70jim

(integer)2

127.0.0.1:6379> zadd stu_score2 80 tom 90lucy

(integer)2

#默认为SUM

127.0.0.1:6379> ZUNIONSTORE stu_score3 2stu_score1 stu_score2

(integer)3

127.0.0.1:6379> ZRANGE stu_score3 0 -1withscores1) "jim"

2) "70"

3) "lucy"

4) "90"

5) "tom"

6) "140"

127.0.0.1:6379>

#WEIGHTS 和 AGGREGATE

127.0.0.1:6379> ZRANGE stu_score1 0 -1withscores1) "tom"

2) "60"

3) "jim"

4) "70"

127.0.0.1:6379> ZRANGE stu_score2 0 -1withscores1) "tom"

2) "80"

3) "lucy"

4) "90"

#权重1给stu_score1,权重0.5给stu_score2,算完权重之后求和SUM

127.0.0.1:6379> ZUNIONSTORE stu_score8 2 stu_score1 stu_score2 weights 1 0.5AGGREGATE SUM

(integer)3

127.0.0.1:6379> ZRANGE stu_score8 0 -1withscores1) "lucy"

2) "45"

3) "jim"

4) "70"

5) "tom"

6) "100"

127.0.0.1:6379>

12.交集

ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM|MIN|MAX

和并集类似,只取相同的元素

python操作sorted set

importredis

r= redis.Redis(host='192.168.43.49',port=6379,password='123456',db=0)#注意第二个参数为字典

r.zadd('salary',{'tom':6000,'jim':8000,'jack':12000})#结果为列表中存放元组[(),(),()]

print(r.zrange('salary',0,-1,withscores=True))print(r.zrevrange('salary',0,-1,withscores=True))#start:起始值,num:显示条数

print(r.zrangebyscore('salary',6000,12000,start=1,num=2,withscores=True))#删除

r.zrem('salary','tom')print(r.zrange('salary',0,-1,withscores=True))#增加分值

r.zincrby('salary',5000,'jack')print(r.zrange('salary',0,-1,withscores=True))#返回元素排名

print(r.zrank('salary','jack'))print(r.zrevrank('salary','jack'))#删除指定区间内的元素

r.zremrangebyscore('salary',6000,8000)print(r.zrange('salary',0,-1,withscores=True))#统计元素个数

print(r.zcard('salary'))#返回指定范围内元素个数

print(r.zcount('salary',6000,20000))#并集

r.zadd('salary2',{'jack':17000,'lucy':8000})

r.zunionstore('salary3',('salary','salary2'),aggregate='max')print(r.zrange('salary3',0,-1,withscores=True))#交集

r.zinterstore('salary4',('salary','salary2'),aggregate='max')print(r.zrange('salary4',0,-1,withscores=True))

案例1:网易音乐排行榜

1、每首歌的歌名作为元素(先不考虑重复)

2、每首歌的播放次数作为分值

3、使用ZREVRANGE来获取播放次数最多的歌曲

importredis

r= redis.Redis(host='192.168.43.49',port=6379,password='123456',db=0)

r.zadd('ranking',{'song1':1,'song2':1,'song3':1,'song4':1})

r.zadd('ranking',{'song5':1,'song6':1,'song7':1})

r.zadd('ranking',{'song8':1,'song9':1})

r.zincrby('ranking',50,'song3')

r.zincrby('ranking',60,'song5')

r.zincrby('ranking',80,'song7')#获取前3名

rlist = r.zrevrange('ranking',0,2,withscores=True)

i= 1

for r inrlist:print('第%d名:%s' %(i,r[0].decode()))#print('第{}名:{}播放次数:{}'.format(i,name[0].decode(),int(name[1])))

i += 1

案例2: 京东商品畅销榜

# 第1天

ZADD mobile-001 5000 'huawei' 4000 'oppo' 3000 'iphone'

# 第2天

ZADD mobile-002 5200 'huawei' 4300 'oppo' 3230 'iphone'

# 第3天

ZADD mobile-003 5500 'huawei' 4660 'oppo' 3580 'iphone'

问题:如何获取三款收集的销量排名?

ZUNIONSTORE mobile-001:003 mobile-001 mobile-002 mobile-003 # 可否?

# 正确

1、ZADD mobile-003 5500 'huawei' 4660 'oppo' 3580 'iphone'

2、ZUNIONSTORE mobile-001:003 mobile-001 mobile-002 mobile-003 AGGREGATE MAX

importredis

r= redis.Redis(host='127.0.0.1', port=6379, db=0)#先定义三个集合mobile-001,mobile-002,mobile-003#定义三个字典

day01_dict ={'huawei': 5000,'oppo': 4000,'iphone': 3000}

day02_dict={'huawei': 5200,'oppo': 4300,'iphone': 3890}

day03_dict={'huawei': 5500,'oppo': 4600,'iphone': 3500}

r.zadd('mobile-001', day01_dict)

r.zadd('mobile-002', day02_dict)

r.zadd('mobile-003', day03_dict)

r.zinterstore('mobile-001:003',

('mobile-001', 'mobile-002', 'mobile-003'),

aggregate='max')#逆序

res = r.zrevrange('mobile-001:003', 0, 2, withscores=True)for i inres:print('{}-{}'.format(i[0].decode(), i[1]))

python集合类型中的元素是有序的_数据类型;有序集合类型(sorted set)相关推荐

  1. python集合的运算、不使用有的运算符_无序的集合:Python中的数学集合运算

    全文共8958字,预计学习时长23分钟 图源:unsplash set是Python中无序的集合,它可以用于计算标准数学运算,例如交集.并集.差集和对称差集,Other集合(例如列表.元组和字典)不支 ...

  2. Python 获取list 中指定元素出现的次数

    Python 获取list 中指定元素出现的次数 使用list 的count 方法 list_a = [1, 2, 3, 1, 4, 5, 1] print("1 出现的次数: %d&quo ...

  3. python 替换字符串中的元素

    python 替换字符串中的元素 def str_replace(old_str,old,new):"""在 old_str 字符串中,把 old 替换成 new:par ...

  4. Python返回列表中某个元素的出现次数list.count()方法

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] Python返回列表中某个元素的出现次数 list.count()方法 选择题 请问以下Python代码输出的结果是什么 ...

  5. python取出frozenset中的元素存到列表list

    python取出frozenset中的元素存到列表 由于frozenset中的元素不能像set一样进行增加(.add())也不能减少(.remove)操作 所以我们希望用列表list来存frozens ...

  6. python 判断list 中重复元素最后1次出现的位置

    方法 1 把list 转string 之后使用rfind python 判断list 中重复元素最后1次出现的位置 ,list 中没有直接方法判断 不过string 有find 和 rfind的 ,f ...

  7. python集合类型中的元素是有序的_Python基础-2-变量和数据类型(2)-列表、元组、字典、集合...

    # ************************************************** ## 3.列表# ************************************** ...

  8. python集合类型中的元素是有序的_python基础篇:很有意思的数据类型,集合(set) 常用去去重...

    Python集合(set),是一个很有意思的数据结构.从形式上看,它像字典有key但没有value,它的写法是这样的s = {'a', 'b', 'c'},是不是像一个没有value的字典?另一方面, ...

  9. python集合类型中的元素是有序的_Python数据类型之集合set

    # 集合:用来存储一个无序的不重复的元素序列 # 集合的标识也是大括号{},中间的元素使用逗号","隔开 # 集合的创建方式: # set(序列) # s = {"123 ...

最新文章

  1. 04号团队-团队任务5:项目总结会
  2. Learning C# by Developing Games with Unity 5.x(2nd) 学习
  3. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
  4. BlockChain:《Blockchain Gate》听课笔记——以POW机制为例阐述共识机制的激励相容设计
  5. 如何在GraphPad Prism中使用非线性回归拟合模型?
  6. [LeetCode] 402. Remove K Digits Java
  7. HDU 2066 一个人的旅行
  8. java学习笔记十一——对象转型
  9. 计算机地址栏搜索不了网,我的电脑地址栏不见了怎么办 地址栏不见了如何解决...
  10. iOS使用自定义字体(添加字体包)
  11. 修改linux默认启动级别(包括Ubuntu)
  12. Python Types
  13. ssis 执行 依赖_从SSIS执行您自己的.NET控制台应用程序
  14. Java学习系列(十二)Java面向对象之序列化机制及版本
  15. Python2.7-异常和工具
  16. 浅谈ViewState原理
  17. paip.输入法编程---词频调整--单字优先编码发音一致优先的问题跟调整
  18. 一图助你搞明白Spring应用上下文初始化流程!
  19. 复化梯形公式matlab实验报告_复化梯形公式matlab
  20. 图解---电脑连接wifi,显示无法连接到这个网络

热门文章

  1. 荣耀手机点击android键,荣耀6android6.0怎么刷回android4.4
  2. 【原生Javascript案例】封装小说阅读器插件
  3. HTML5+CSS3海绵宝宝网站设计(1)
  4. 域计算机连接工作组打印机共享,工作组电脑访问域内共享打印机
  5. 什么是SpringCloud
  6. 梯度下降算法的python实现
  7. 打开盘符或文件夹总是弹出新窗口解决办法
  8. 《Urban stranger》——都市异乡人{英汉互译}【都市时代,异乡异客的我们】
  9. 写个自动导出华为交换机配置的脚本
  10. 教你购入Galaxy Nexus 新机该如何验机!