Python(Redis 中 Set/Zset 类型数据和其他操作)
1、redis 基本操作命令
- Set 操作
- Set 集合就是不允许重复的列表
- 无序集合

- sadd(name,values) 给 name 对应的集合中添加 1 个或多个元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("Animal","cat") # 给 Animal 集合中添加 1 个元素
print(re.smembers("Animal"))
re.sadd("Animal","dog","pig") # 给 Animal 集合中添加多个元素
print(re.smembers("Animal")) # 结果如下
{'cat'}
{'pig', 'dog', 'cat'}
- smembers(name) 获取 name 对应的集合的所有成员
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal")) # 获取 Animal 对应的值 # 结果如下
{'cat', 'dog', 'pig'}
- srandmember(name,numbers) 从 name 对应的集合中随机获取 numbers 个元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.srandmember("Animal",2)) # 结果如下
['dog', 'pig']
- scard(name) 获取 name 对应的集合中的元素个数
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal")) # 获取 Animal 对应的值
print(re.scard("Animal")) # 获取 Animal 对应的值的数量 # 结果如下
{'pig', 'cat', 'dog'}
3
- sdiff(keys,*args) 在第一个 name 对应的集合中且不在其他 name 对应的集合的元素集合
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sdiff("set_name","set_name1","set_name2")) # 输出存在 set_name 中但是不存在 set_name1 和 set_name2 中的元素 # 结果如下
{'aa'}
- sinter(keys,*args) 获取多个 name 对应集合的交集
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd") print(re.sinter("set_name","set_name1","set_name2")) # 输出 set_name,set_name1 和 set_name2 的交集 # 结果如下
{'bb'}
- sunion(keys,*args) 获取多个 name 对应的集合的并集
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sunion("set_name","set_name1","set_name2")) # 获取 set_name,set_name1,set_name2 的并集 # 结果如下
{'bb', 'cc', 'aa', 'dd'}
- sismember(name,value)检查 value 是否是 name 对应的集合内的元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.sismember("Animal","cat")) # 判断 cat 存在于集合 Animal 中 # 结果如下
True
- smove(src,dst,value)将元素 value 从 src 集合中移动到 dst 集合中
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.smove("set_name1","set_name","cc") # 将 set_name1 中的 cc 移动到 set_name 中
- spop(name) 从集合的右侧移除一个元素,并将其返回
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
print(re.spop("Animal")) # 移除某个值(无序删除)
print(re.smembers("Animal")) # 结果如下
{'dog', 'cat', 'pig'}
cat
{'dog', 'pig'}
- srem(name, values) 指定删除 name 集合中的元素 values
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat") # 指定删除 Animal 集合中的 cat 元素
print(re.smembers("Animal")) # 结果如下
{'dog', 'cat', 'pig'}
{'dog', 'pig'}
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat","pig") # 指定删除 Animal 集合中的 cat 和 pig 元素
print(re.smembers("Animal")) # 结果如下
{'pig', 'cat', 'dog'}
{'dog'}
- Zset 操作
- 有序集合:在集合的基础上,为每元素排序,元素的排序需要根据另外一个值来进行比较
- 对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序

- zadd(name,mapping) 在 name 对应的有序集合中添加元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.zadd("Animal",{"cat":1,"dog":2,"pig":3}) # 往有序集合 Animal 中加入元素值和其对应的分数
- zrange( name,start,end,desc=False,withscores=False,score_cast_func=int) 按照索引范围 [start,end] 获取 name 对应的有序集合的元素
- name:redis 的 name
- start:有序集合索引起始位置
- end:有序集合索引结束位置
- desc:排序规则,默认按照分数从小到大排序
- False:按分数从小到大排序
- True:按分数从大到小排序
- withscores:是否获取元素的分数,默认只获取元素的值
- False:只获取元素值
- True:获取元素值和分数
- score_cast_func:对分数进行数据转换的函数
- zrange( name,start,end,desc=False,withscores=False,score_cast_func=int) 按照索引范围 [start,end] 获取 name 对应的有序集合的元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
['cat', 'dog', 'pig']
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2,desc=True,withscores=True)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]
- zrevrange(name,start,end,withscores=False,score_cast_func=float) 按照索引范围 [start,end] 获取 name 对应的有序集合的元素
- 用法同 zrange()
- 默认按分数从大到小排序的
- zrevrange(name,start,end,withscores=False,score_cast_func=float) 按照索引范围 [start,end] 获取 name 对应的有序集合的元素
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrevrange("Animal",0,2,withscores=True)) # 获取 Animal 有序集合中索引范围为 [0,2] 所对应的值 # 结果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]
- zscore(name,value) 获取name对应有序集合中 value 对应的分数
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
print(int(re.zscore("Animal","pig"))) # 获取 Animal 对应有序集合中 pig 对应的分数 # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
3
- zcard(name) 获取有序集合内元素的数量
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcard("Animal")) # 结果如下
3
- zcount(name,min,max) 获取有序集合中分数在 [min,max] 之间的个数
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcount("Animal",2,3)) # 获取有序集合 Animal 中分数在 [2,3] 之间的元素数量 # 结果如下
2
- zrank(name,value) 获取 value 在 name 对应的有序集合中的排行位置,从 0 开始
- 按照分数从小到大排序
- zrevrank(name,value) 获取 value 在 name 对应的有序集合中的排行位置,从 0 开始
- 按照分数从大到小排序
- zrank(name,value) 获取 value 在 name 对应的有序集合中的排行位置,从 0 开始
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5))
print(re.zrank("Animal","cat")) # 获取 cat 在 Animal 对应的有序集合中的排行位置,从 0 开始(按照分数从小到大排序)
print(re.zrevrank("Animal","cat")) # 获取 cat 在 Animal 对应的有序集合中的排行位置,从 0 开始(按照分数从大到小排序) # 结果如下
['cat', 'dog', 'pig']
0
2
- zrem(name,values) 删除 name 对应的有序集合中值是 values 的成员
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zrem("Animal","dog","cat") # 删除 Animal 对应的有序集合中值是 dog 和 cat 的成员
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('pig', 3.0)]
- zremrangebyrank(name,min,max) 根据排行范围删除
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyrank("Animal",0,2) # 删除 Animal 对应的有序集合中排行索引值 [0,2] 范围的元素
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[]
- zremrangebyscore(name,min,max) 根据分数范围删除
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyscore("Animal",0,2) # 删除 Animal 对应的有序集合中分数等于 0 或者 2 的元素
# re.zremrangebyscore("Animal",2,2) # 删除 Animal 对应的有序集合中分数等于 2 的元素
print(re.zrange("Animal",0,5,withscores=True)) # 结果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('cat', 1.0)]
# [('cat', 1.0), ('pig', 3.0)]
- 其他操作
- delete(*names) 根据 name 删除 redis 中的任意数据类型
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits") # 删除 db0 中 Student2 和 Fruits 数据
- exists(name) 检测 redis 的 name 是否存在
- 0 表示不存在
- 1 表示存在
- exists(name) 检测 redis 的 name 是否存在
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits") # 删除 db0 中 Student2 和 Fruits 数据
print(re.exists("Student2")) # 判断在 db0 中 Student2 是否存在
print(re.exists("Student1")) # 结果如下
0
1
- rename(src,dst) 将 src 重命名为 dst
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.rename("Student1","Student") # 将 Student1 重命名为 Student
print(re.get("Student")) # 结果如下
zhaoliu
- move(name,db) 将 redis 的某个值移动到指定的 db 下
- db 为 int
- move(name,db) 将 redis 的某个值移动到指定的 db 下
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.move("Student",4) # 将 Student 从 db0 移动到 db4 中
- type(name) 获取 name 对应值的类型
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.type("Student"))
print(re.type("Teacher")) # 结果如下
string
hash
Python(Redis 中 Set/Zset 类型数据和其他操作)的更多相关文章
- 7、Redis中对ZSet类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ---------- ...
- 3、Redis中对String类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- asp.net mvc视图中使用entitySet类型数据时提示出错
asp.net mvc5视图中使用entitySet类型数据时提示以下错误 检查了一下引用,发现已经引用了System.Data.Linq了,可是还是一直提示出错, 后来发现还需要在Views文件夹下 ...
- 6、Redis中对Hash类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- 5、Redis中对Set类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- 4、Redis中对List类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- python redis中blpop和lpop的区别
python redis 中blpop返回的是元组对象,因此返回的时候注意 lpop返回的是对象
- Redis自学笔记–Zset类型及管理简述
Zset类型 ...
- [python] 查询mysql返回datetime类型数据的处理
Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题. 在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串. from dat ...
随机推荐
- 15分钟从零开始搭建支持10w+用户的生产环境(一)
前言 这是一个基于中小型企业或团队的架构设计. 不考虑大厂.有充分的理由相信,大厂有绝对的实力来搭建一个相当复杂的环境. 中小型企业或团队是个什么样子? 开发团队人员配置不全,部分人员身兼开发过程上下 ...
- 第一天总结(while计数器+成绩大小+获取时间+猜拳大小)
#*_* coding:utf-8 *_*# while 先有一个计数器 input = 0# input = input('输入数字')while input < 5: input= inpu ...
- logger日志级别
Level 描述 ALL 各级包括自定义级别 DEBUG 指定细粒度信息事件是最有用的应用程序调试 ERROR 错误事件可能仍然允许应用程序继续运行 FATAL 指定非常严重的错误事件,这可能导致应用 ...
- HBase-2.2.3源码编译-Windows版
源码环境一览 windows: 7 64Bit Java: 1.8.0_131 Maven:3.3.9 Git:2.24.0.windows.1 HBase:2.2.3 Hadoop:2.8.5 下载 ...
- mysql 不能对同一个表进行 update(delete) 和 select 联合操作
eq: update a set a.x = 1 where a.y in (select a.x from a); 上边语法是错误的,在对aupdate 时不能再条件中对同一个a表进 ...
- PLSQL Developer 中文乱码踩坑记
环境 操作系统版本: Windows 7 PL/SQL 版本: 12.0.1.1814 原因 由于 Oracle 服务器端和客户端字符集编码不一致引起的. 注意点 写在最前面,减少踩坑!!! 网上教程 ...
- 【原创干货】大数据Hadoop/Spark开发环境搭建
已经自学了好几个月的大数据了,第一个月里自己通过看书.看视频.网上查资料也把hadoop(1.x.2.x).spark单机.伪分布式.集群都部署了一遍,但经历短暂的兴奋后,还是觉得不得门而入. 只有深 ...
- SpringCloud-Ribbon负载均衡机制、手写轮询算法
Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...
- 4. git log的常见用法
git log ======见https://blog.csdn.net/daguanjia11/article/details/73823617 +++++++++++++++++++++++ 使用 ...
- 用Java代码来校验QQ号
校验qq号码: 1.要求必须是5-15位数字 2.0不能开头 分析: A:键盘录入一个qq号码 B:写一个功能实现校验 C:调用功能,输出结果. 代码实现:public class RegexDemo ...