一、无序集合

  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. C# 反射,动态编译

    反射是动态获取程序集的元数据的一种技术,这句话是做.NET程序员面试题目的一个的答案,你可选择记住它,就好比高中生物学里面讲到的细胞的结构的课程时,细胞由细胞膜,细胞质和细胞核组成.根据做程序的经验, ...

  2. 使用 MPI for Python 并行化遗传算法

    前言 本文中作者使用MPI的Python接口mpi4py来将自己的遗传算法框架GAFT进行多进程并行加速.并对加速效果进行了简单测试. 项目链接: GitHub: https://github.com ...

  3. Table Tennis Game 2(找规律)

    Description Misha and Vanya have played several table tennis sets. Each set consists of several serv ...

  4. 20172305 2018-2019-1 《Java软件结构与数据结构》第九周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 本周内容主要为书第十五章内容: 图(结点和结点之间的连接构成) 顶点:结点 边:结 ...

  5. Android:有关菜单的学习(供自己参考)

    Android:有关==菜单==的学习 上下文菜单 上下文菜单就是手机中对某一项进行==点击一定时间==后弹出的针对该项处理的菜单. context_menu.xml: <?xml versio ...

  6. linux +redis 安装 +mongo 安装

    Linux 下redis安装 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://download.redis.io/releases/redis-2.8.17.tar ...

  7. HDU 5617 Jam's maze dp+滚动数组

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617 bc(中文):http://bestcoder.hdu.edu.cn/contest ...

  8. 第8章 Linux磁盘与文件系统管理

    认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...

  9. Beta 阶段项目计划

    Beta 阶段项目计划 NewTeam 目标 实现用户数量的目标. 在多个平台发布 完成稳定运行.界面优雅的客户端 充分测试,避免发布后出现bug影响用户使用 及时更新开发文档 合理安排时间,避免和其 ...

  10. 【week10】psp

    项目 内容 开始时间 结束时间 中断时间 净时间 2016/11/19(星期六) 写博客 吉林一日游规格说明书 10:30 15:10 20 260 2016/11/20(星期日) 看论文 磷酸化+三 ...