Python-- Redis Set
一、无序集合
Set操作,Set集合就是不允许重复的列表
1.1 sadd(name, values)
- # name对应的集合中添加元素
1.2 smembers(name)
- # 获取name对应的集合的所有成员
- r.sadd('s1', 't1', 't2', 't3', 't1')
- print(r.smembers('s1'))
- # 输出
- {b't1', b't2', b't3'}
- # 集合是去重的
1.3 scard(name)
- #获取name对应的集合中元素个数
- print(r.scard('s1'))
- #输出
- 3
1.4 sdiff(keys, *args)
- # 在第一个name对应的集合中且不在其他name对应的集合的元素集合
- print(r.smembers('s1'))
- print(r.smembers('s2'))
- print(r.sdiff('s1', 's2'))
- #输出
- {b't3', b't1', b't2'}
- {b't1', b't5', b't4'}
- {b't3', b't2'}
- # 集合s1中的 t2 和 t3 不在s2中
1.5 sdiffstore(dest, keys, *args)
- # 获取第一个name对应的集合中且不在其他name对应的集合,
- #再将其新加入到dest对应的集合中
- print('s1:', r.smembers('s1'))
- print('s2:', r.smembers('s2'))
- r.sdiffstore('s3', 's1', 's2')
- print('s3:', r.smembers('s3'))
- #输出
- s1: {b't1', b't3', b't2'}
- s2: {b't4', b't5', b't1'}
- s3: {b't3', b't2'}
1.6 sinter(keys, *args)
- # 获取多个集合的交集
- print('s1:', r.smembers('s1'))
- print('s2:', r.smembers('s2'))
- print('交集:', r.sinter('s1', 's2'))
- #输出
- s1: {b't2', b't1', b't3'}
- s2: {b't1', b't4', b't5'}
- 交集: {b't1'}
1.7 sinterstore(dest, keys, *args)
- # 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中
- print('s1:', r.smembers('s1'))
- print('s2:', r.smembers('s2'))
- r.sinterstore('s4', 's1', 's2')
- print('s4:', r.smembers('s4'))
- #输出
- s1: {b't3', b't2', b't1'}
- s2: {b't1', b't5', b't4'}
- s4: {b't1'}
1.8 sismember(name, value)
- # 检查value是否是name对应的集合的成员
- print(r.sismember('s1', 't1'))
- print(r.sismember('s1', 't5'))
- #输出
- True
- False
1.9 smove(src, dst, value)
- # 将某个成员从一个集合中移动到另外一个集合
- print('s1:', r.smembers('s1'))
- print('s2:', r.smembers('s2'))
- r.smove('s1', 's2', 't2')
- print('s1:', r.smembers('s1'))
- print('s2:', r.smembers('s2'))
- # 输出
- s1: {b't2', b't1', b't3'}
- s2: {b't4', b't1', b't5'}
- s1: {b't1', b't3'}
- s2: {b't4', b't2', b't1', b't5'}
1.10 spop(name)
- # 从集合的右侧(尾部)移除一个成员,并将其返回
- print('s1:', r.smembers('s1'))
- r.spop('s1')
- print('s1:', r.smembers('s1'))
- #输出
- s1: {b't1', b't3'}
- s1: {b't1'}
1.11 srandmember(name, numbers)
- # 从name对应的集合中随机获取 numbers 个元素
- print('s2:', r.smembers('s2'))
- print(r.srandmember('s2', 3))
- #输出,从s2中随机获取3个数
- s2: {b't5', b't2', b't1', b't4'}
- [b't5', b't2', b't1']
1.12 srem(name, values)
- # 在name对应的集合中删除某些值
- print('s2:', r.smembers('s2'))
- r.srem('s2', 't5')
- print('s2:', r.smembers('s2'))
- #输出
- s2: {b't2', b't1', b't5', b't4'}
- s2: {b't2', b't1', b't4'}
1.13 sunion(keys, *args)
- # 获取多一个name对应的集合的并集
- print(r.smembers('s3'))
- print(r.smembers('s4'))
- print(r.sunion('s3', 's4'))
- #输出
- {b't3', b't2'}
- {b't1'}
- {b't1', b't3', b't2'}
1.14 sunionstore(dest,keys, *args)
- # 获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中
- print('s3:', r.smembers('s3'))
- print('s4:', r.smembers('s4'))
- r.sunionstore('s6', 's3', 's4')
- print('s6:', r.smembers('s6'))
- #输出
- s3: {b't2', b't3'}
- s4: {b't1'}
- s6: {b't2', b't1', b't3'}
1.15 sscan(name, cursor=0, match=None, count=None)
- # 分片获取数据
- print('test_info:', r.smembers('test_info'))
- print(r.sscan('test_info', 0, match='J*'))
- # 输出
- test_info: {b'Jerry', b'Jack', b'Tom', b'Sam'}
- (0, [b'Jack', b'Jerry'])
1.16 sscan_iter(name, match=None, count=None)
- # 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
二、有序集合
有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。
2.1 zadd(name, *args, **kwargs)
- # 在name对应的有序集合中添加元素
- # 如:
- # zadd('zz', 'n1', 1, 'n2', 2)
- # 或
- # zadd('zz', n1=11, n2=22)
- r.zadd('z1', 't1', 10, 't2', 5, 't3', 4, 't4', 8)
2.2 zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
- # 按照索引范围获取name对应的有序集合的元素
- # 参数:
- # name,redis的name
- # start,有序集合索引起始位置(非分数)
- # end,有序集合索引结束位置(非分数)
- # desc,排序规则,默认按照分数从小到大排序
- # withscores,是否获取元素的分数,默认只获取元素的值
- # score_cast_func,对分数进行数据转换的函数
- # 更多:
- # 从大到小排序
- # zrevrange(name, start, end, withscores=False, score_cast_func=float)
- # 按照分数范围获取name对应的有序集合的元素
- # zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
- # 从大到小排序
- # zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
- print(r.zrange('z1', 0, -1))
- print(r.zrange('z1', 0, -1, withscores=True))
- #输出
- [b't3', b't2', b't4', b't1']
- [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0), (b't1', 10.0)]
2.3 zcard(name)
- # 获取name对应的有序集合元素的数量
- print(r.zcard('z1'))
- #输出
- 4
2.4 zcount(name, min, max)
- # 获取name对应的有序集合中分数 在 [min,max] 之间的个数
- print(r.zrange('z1', 0, -1, withscores=True))
- print(r.zcount('z1', 5, 8))
- #输出
- 2
2.5 zincrby(name, value, amount)
- # name 对应的有序集合中的value分数增加 amount
- print(r.zrange('z1', 0, -1, withscores=True))
- print(r.zincrby('z1', 't3', 6))
- print(r.zrange('z1', 0, -1, withscores=True))
- #输出
- [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0), (b't1', 10.0)]
- 10.0
- [(b't2', 5.0), (b't4', 8.0), (b't1', 10.0), (b't3', 10.0)]
2.6 zrank(name, value)
- # 获取某个值在 name对应的有序集合中的排行(从 0 开始)
- # 更多:
- # zrevrank(name, value),从大到小排序
- print(r.zrange('z1', 0, -1, withscores=True))
- print(r.zrank('z1', 't1'))
- print(r.zrevrank('z1', 't1'))
- #输出
- [(b't2', 5.0), (b't4', 8.0), (b't1', 10.0), (b't3', 10.0)]
- 2
- 1
2.7 zrem(name, values)
- # 删除name对应的有序集合中值是values的成员
- # 如:zrem('zz', ['s1', 's2'])
- print(r.zrange('z1', 0, -1, withscores=True))
- r.zrem('z1', 't1')
- print(r.zrange('z1', 0, -1, withscores=True))
- #输出
- [(b't2', 5.0), (b't4', 8.0), (b't1', 10.0), (b't3', 10.0)]
- [(b't2', 5.0), (b't4', 8.0), (b't3', 10.0)
2.8 zremrangebyrank(name, min, max)
- # 根据排行范围删除,不在该范围内的都删除
- r.zremrangebyrank('z1', 1, 6)
- print(r.zrange('z1', 0, -1, withscores=True))
- #输出
- [(b't2', 5.0)]
2.9 zremrangebyscore(name, min, max)
- # 根据分数范围删除
- print(r.zrange('z1', 0, -1, withscores=True))
- r.zremrangebyscore('z1', 1, 6)
- print(r.zrange('z1', 0, -1, withscores=True))
- #输出
- [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0), (b't1', 10.0)]
- [(b't4', 8.0), (b't1', 10.0)]
2.10 zscore(name, value)
- # 获取name对应有序集合中 value 对应的分数
- print(r.zrange('z1', 0, -1, withscores=True))
- print(r.zscore('z1', 't1'))
- #输出
- [(b't4', 8.0), (b't1', 10.0)]
- 10.0
2.11 zinterstore(dest, keys, aggregate=None)
- # 获取两个有序集合的交集,如果遇到相同值,则按照aggregate进行操作
- # aggregate的值为: SUM MIN MAX 默认 SUM
- print('z2:', r.zrange('z2', 0, -1, withscores=True))
- print('z3:', r.zrange('z3', 0, -1, withscores=True))
- r.zinterstore('z6', {'z2', 'z3'})
- print('z6:', r.zrange('z6', 0, -1, withscores=True))
- # 输出
- z2: [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0), (b't1', 10.0)]
- z3: [(b't3', 2.0), (b't1', 6.0), (b't2', 7.0), (b't4', 12.0)]
- z6: [(b't3', 6.0), (b't2', 12.0), (b't1', 16.0), (b't4', 20.0)]
- print('z2:', r.zrange('z2', 0, -1, withscores=True))
- print('z3:', r.zrange('z3', 0, -1, withscores=True))
- r.zinterstore('z7', {'z2', 'z3'}, aggregate='MIN')
- print('z7:', r.zrange('z7', 0, -1, withscores=True))
- r.zinterstore('z8', {'z2', 'z3'}, aggregate='MAX')
- print('z8:', r.zrange('z8', 0, -1, withscores=True))
- # 输出
- z2: [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0), (b't1', 10.0)]
- z3: [(b't3', 2.0), (b't1', 6.0), (b't2', 7.0), (b't4', 12.0)]
- z7: [(b't3', 2.0), (b't2', 5.0), (b't1', 6.0), (b't4', 8.0)]
- z8: [(b't3', 4.0), (b't2', 7.0), (b't1', 10.0), (b't4', 12.0)]
如果其中两个集合中个数不符合,则单独的那个值不会进行运算
2.12 zunionstore(dest, keys, aggregate=None)
- print('z2:', r.zrange('z2', 0, -1, withscores=True))
- print('z3:', r.zrange('z3', 0, -1, withscores=True))
- r.zunionstore('z10', {'z2', 'z3'})
- print('z10:', r.zrange('z10', 0, -1, withscores=True))
- #输出
- z2: [(b't3', 4.0), (b't2', 5.0), (b't4', 8.0)]
- z3: [(b't3', 2.0), (b't1', 6.0), (b't2', 7.0), (b't4', 12.0)]
- z10: [(b't1', 6.0), (b't3', 6.0), (b't2', 12.0), (b't4', 20.0)]
2.13 zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
2.14 zscan_iter(name, match=None, count=None,score_cast_func=float)
- # 同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作
Python-- Redis Set的更多相关文章
- python+redis测试环境搭建
针对windows操作系统. redis安装: 微软操作系统下,需下载github下面的开源项目,redis网站地址可以找到,直接解压即可. cmd到指定目录,输入下方命令,启动redis服务. re ...
- Python redis 简单介绍
Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...
- 生产消费者模式与python+redis实例运用(中级篇)
上一篇文章介绍了生产消费者模式与python+redis实例运用(基础篇),但是依旧遗留了一个问题,就是如果消费者消费的速度跟不上生产者,依旧会浪费我们大量的时间去等待,这时候我们就可以考虑使用多进程 ...
- 生产消费者模式与python+redis实例运用(基础篇)
根据这个图,我们举个简单的例子:假如你去某个餐厅吃饭,点了很多菜,厨师要一个一个菜的做,一个厨师不可能同时做出所有你点的菜,于是你有两个选择:第一个,厨师把所有菜都上齐了,你才开始吃:还有一个选择,做 ...
- python redis中blpop和lpop的区别
python redis 中blpop返回的是元组对象,因此返回的时候注意 lpop返回的是对象
- windows中实现python,redis服务自动重启(任务计划程序+bat脚本)
需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...
- python redis分布式锁改进
0X01 python redis分布式锁通用方法 REDIS分布式锁实现的方式:SETNX + GETSET 使用Redis SETNX 命令实现分布式锁 python 版本实现上述思路(案例1) ...
- python redis之连接池的原理
python redis之连接池的原理 转载地址 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下 ...
- python redis 实现简单的消息订阅
python + redis 实现简单的消息订阅 订阅端 import redis from functools import wraps class Subscribe: def __init__( ...
- Python—redis
一.redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...
随机推荐
- PHP 整数
实验环境php 5.2.17,参考资料:PHP手册 1.整数溢出 如果整数超出最大范围或者运算结果超出最大范围,都会转变成float <?php $a=2147483647; var_dump( ...
- C# 反射,动态编译
反射是动态获取程序集的元数据的一种技术,这句话是做.NET程序员面试题目的一个的答案,你可选择记住它,就好比高中生物学里面讲到的细胞的结构的课程时,细胞由细胞膜,细胞质和细胞核组成.根据做程序的经验, ...
- 手动配置网卡配置文件ifcfg-eth0
linux 其他知识目录 原文链接:https://www.cnblogs.com/arvintang/p/5990599.html 网络接口配置文件[root@localhost ~]# cat / ...
- KETTLE元数据表
表名 说明 R_CLUSTER R_CLUSTER_SLAVE R_CONDITION R_DATABASE 数据库连接信息 R_DATABASE_ATTRIBUTE 数据库属性 R_DATABASE ...
- Python3 解压序列
一 普遍情况: x,y,z = 1,2,3 print("x:",x) # x:1 print("y:",y) # y:2 print("z:&quo ...
- Phonegap 环境配置
目前要开发 Web App 还是有比较多的选择的 如 Phonegap.MUI.AppCan,接下来以 Web前端开发工程师 的角度来一个 Phonegap 的 First Blood 一.开发环境: ...
- LeetCode 454. 4Sum II (C++)
题目: Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are su ...
- ACM 第二十天
积性函数.杜教筛 练习题 莫比乌斯函数之和 51Nod - 1244 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号. ...
- lintcode-402-连续子数组求和
[402-连续子数组求和(http://www.lintcode.com/zh-cn/problem/continuous-subarray-sum/) 给定一个整数数组,请找出一个连续子数组,使得该 ...
- IT就业·软件工程之我见
随着计算机技术的飞速发展,让人们深切感受到科技让生活更美好的真正含义. 现如今我们的正常生活,社交都越来越离不开网络和终端,因特网和各种终端设备的组合让我们即使相距千里,也能面对面对话交流:购物,我们 ...