一、无序集合

  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的更多相关文章

  1. python+redis测试环境搭建

    针对windows操作系统. redis安装: 微软操作系统下,需下载github下面的开源项目,redis网站地址可以找到,直接解压即可. cmd到指定目录,输入下方命令,启动redis服务. re ...

  2. Python redis 简单介绍

    Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...

  3. 生产消费者模式与python+redis实例运用(中级篇)

    上一篇文章介绍了生产消费者模式与python+redis实例运用(基础篇),但是依旧遗留了一个问题,就是如果消费者消费的速度跟不上生产者,依旧会浪费我们大量的时间去等待,这时候我们就可以考虑使用多进程 ...

  4. 生产消费者模式与python+redis实例运用(基础篇)

    根据这个图,我们举个简单的例子:假如你去某个餐厅吃饭,点了很多菜,厨师要一个一个菜的做,一个厨师不可能同时做出所有你点的菜,于是你有两个选择:第一个,厨师把所有菜都上齐了,你才开始吃:还有一个选择,做 ...

  5. python redis中blpop和lpop的区别

    python redis 中blpop返回的是元组对象,因此返回的时候注意 lpop返回的是对象

  6. windows中实现python,redis服务自动重启(任务计划程序+bat脚本)

    需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...

  7. python redis分布式锁改进

    0X01 python redis分布式锁通用方法 REDIS分布式锁实现的方式:SETNX + GETSET 使用Redis SETNX 命令实现分布式锁 python 版本实现上述思路(案例1) ...

  8. python redis之连接池的原理

    python redis之连接池的原理 转载地址 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下 ...

  9. python redis 实现简单的消息订阅

    python + redis 实现简单的消息订阅 订阅端 import redis from functools import wraps class Subscribe: def __init__( ...

  10. Python—redis

    一.redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

随机推荐

  1. Python 数据图表工具的比较

    Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析.数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些. 幸运的是,过去 ...

  2. Phonegap 环境配置

    目前要开发 Web App 还是有比较多的选择的 如 Phonegap.MUI.AppCan,接下来以 Web前端开发工程师 的角度来一个 Phonegap 的 First Blood 一.开发环境: ...

  3. 详讲H5、WebApp项目中常见的坑以及注意事项

    首先我们中会有一些常用的meta标签,如下: <!--防止手机中网页放大和缩小--> <meta name="viewport" content="wi ...

  4. 常用 php server

    php编程中经常需要用到一些服务器的一些资料,我把常用的用高亮的方式贴出来,其余的放在后面.方便以后查阅     复制代码代码如下: $_SERVER['HTTP_ACCEPT_LANGUAGE']/ ...

  5. BETA阶段冲刺

    1.介绍小组新加入的成员,Ta担任的角色 新成员 担任工作 江鹭涛 前端设计 2.讨论是否需要更换团队的PM 不需要,上阶段配合不错,这阶段继续努力 3.下一阶段需要改进完善的功能 服务器并发处理,界 ...

  6. 第二章 script元素

    <script>元素  async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效.  charset:可选.表示通过 ...

  7. 0302思考&回答

    看完这两个网页,我们可以看出it行业始终是一门热门行业,在现在这个人潮汹涌的人才市场,面对严峻的就业形势,我们应该拿什么去参见招聘?人多而工作职位有限,这警醒我们必须拥有一技之长,否则则会被淘汰.如果 ...

  8. 201621123037 《Java程序设计》第6周学习总结

    作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...

  9. 【week11】psp

    本周psp 项目 内容 开始时间 结束时间 被打断 净时间 11.26(星期六)  看论文 psiBlast  9:00 12:00  5  175    11.28(星期一)  做作业 设计模式作业 ...

  10. ASP.NET存储Session的StateServer

    由于公司要对服务器做个负载均衡,所以Web项目在两台前端服务器(web1.web2)各部署了一份.但是在项目中会用到session.当一开始在web1上登陆后,由于web1之后负载可能会变大,就有可能 ...