美文网首页
python操作Redis学习笔记之set和 zset的基本操作

python操作Redis学习笔记之set和 zset的基本操作

作者: IT_小马哥 | 来源:发表于2019-05-30 15:41 被阅读0次

set表示集合,集合不能重复,并且是无序的。

import redis
#db =6 表示链接到index =6的数据库,decode_responses = True,放入数据库的value是str类型
pool = redis.ConnectionPool(host = 'localhost',port = 6379, db = 6,password = None,decode_responses = True)
r =  redis.StrictRedis(connection_pool = pool)

#增加数据
r.sadd('set1',1,2,3,4,5)
r.sadd('set2',4,5,8,9,10)

#集合长度
print(r.scard('set1'))
#获取成员
print(r.smembers('set1'))

#获取成员,以元组的形式得到结果
print(r.sscan('set1'))

#获取集合中所有的成员,迭代的方式
for i in r.sscan_iter('set1'):
    print(i)

#差集,在第一个集合但是不在第二个集合
print(r.sdiff('set1','set2'))

#把差集放到set3里
r.sdiffstore('set3','set1','set2')
print(r.smembers('set3'))

#交集
print(r.sinter('set1','set2'))

#交集放到新集合
r.sinterstore('set4','set1','set2')
print(r.smembers('set4'))

#判断是否在集合中
print(r.sismember('set1',5))

#移动
r.smove('set1','set2',3)
print(r.smembers('set2'))

#随机删除,并且返回
print(r.spop('set1'))

#指定删除
r.srem('set2',10)
print(r.smembers('set2'))

zset是有序集合,可排序的,但是要唯一。
zset和set的不同之处在于,zset是会给set的元素添加一个分数,然后通过这个分数进行排序。

发现网上教程的错误两处:(可能版本更新吧)我的redis版本3.0.504
第一:r.zadd('example', {'one':10, 'two':20,'three':30})参数必须是字典,网上的教程会报错
第二:r.zincrby('example',5,'one',) 在自增是,第二个参数是增加的值,第三个参数才是value。其他教程是相反的。

import redis
#db =7 表示链接到index =6的数据库,decode_responses = True,放入数据库的value是str类型
pool = redis.ConnectionPool(host = 'localhost',port = 6379, db = 7,password = None,decode_responses = True)
r =  redis.StrictRedis(connection_pool = pool)

#这里网上的教程都错误
#增加元素,注意参数必须是个字典,字典的key是redis的value,字典的value是redis的score
r.zadd('example', {'one':10, 'two':20,'three':30})
r.zadd('example',{ 'num1':40,'num2':50})
#输出zset长度
print(r.zcard('example'))
#获取zset的value
print(r.zrange('example',0,-1))
#withscores 表示将score也一起输出
print(r.zrange('example',0,-1,withscores = True))

#反向输出value
print(r.zrevrange('example',0,-1))
#带score反向
print(r.zrevrange('example',0,-1,withscores = True))

#取出分数,[10,30]的values,注意两边都是闭区间
print(r.zrangebyscore('example',10,30))
#取出分数,[10,30]的values,带score 注意两边都是闭区间
print(r.zrangebyscore('example',10,30,withscores = True))

#迭代取出,输出是元组
for i in  r.zscan_iter('example'):
    print(i)
    
#统计符合条件的总数
print(r.zcount('example',10,30))
#自,网上的教程都错误
r.zincrby('example',5,'one',)
print(r.zrevrange('example',0,-1,withscores = True))

#获取索引号
print(r.zrank('example','one'))
#反向获取
print(r.zrevrank('example','one'))

#指定删除
r.zrem('example','two')
print(r.zrange('example',0,-1,withscores = True))

#按照索引删除,删除索引1和2位置的值
r.zremrangebyrank('example',1,2)
print(r.zrange('example',0,-1,withscores = True))

#根据分数删除
r.zremrangebyscore('example',20,40)
print(r.zrange('example',0,-1,withscores = True))

#获取值对应的分数
print(r.zscore('example','num2'))

zset结果展示:

5
['one', 'two', 'three', 'num1', 'num2']
[('one', 10.0), ('two', 20.0), ('three', 30.0), ('num1', 40.0), ('num2', 50.0)]
['num2', 'num1', 'three', 'two', 'one']
[('num2', 50.0), ('num1', 40.0), ('three', 30.0), ('two', 20.0), ('one', 10.0)]
['one', 'two', 'three']
[('one', 10.0), ('two', 20.0), ('three', 30.0)]
('one', 10.0)
('two', 20.0)
('three', 30.0)
('num1', 40.0)
('num2', 50.0)
3
[('num2', 50.0), ('num1', 40.0), ('three', 30.0), ('two', 20.0), ('one', 15.0)]
0
4
[('one', 15.0), ('three', 30.0), ('num1', 40.0), ('num2', 50.0)]
[('one', 15.0), ('num2', 50.0)]
[('one', 15.0), ('num2', 50.0)]
50.0
zset在数据库的最终存储

相关文章

网友评论

      本文标题:python操作Redis学习笔记之set和 zset的基本操作

      本文链接:https://www.haomeiwen.com/subject/uhjvtctx.html