目录
起步
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""sorted set类型操作
有序集合,成员唯一,分数(浮点型)可以重复
"""
import redis
pool = redis.ConnectionPool(host='192.168.1.104', password='hardy9sap', decode_responses=True)
rs = redis.Redis(connection_pool=pool)
is_connected = rs.ping()
增
zadd
zadd(name, mapping, nx=False, xx=False, ch=False, incr=False)
往name添加一个或多个带分数的成员,返回添加的成员个数;
默认情况下,如果是更新分数的话,返回0,因为不是添加
nx:member必须不存在,才可以设置成功,用于添加.
xx:member必须存在,才可以设置成功,用于添加.
ch:返回此次操作后,有序结合元素和分数发生变化的个数.(默认不会对更新分数进行统计)
incr: 对score进行添加操作,相当于后面介绍的zincrby. (在原有分数上增加)
示例
rsp = rs.zadd(name='redis:method:zadd', mapping={
'value1': '12',
'value2': '20.5',
'value3': 30
}) # 3
print(rsp)
删
zrem
zrem(name, *args),从name中删除一个或多个成员,返回成功删除的个数
示例
rsp = rs.zrem('redis:method:zadd', *('value1', 'value2', 'no:exists:value'))
print(rsp) # 2
zremrangebyrank
zremrangebyrank(name, min, max),
根据rank删除在min和max指定的范围内的成员,返回成功删除的个数
示例
rsp = rs.zremrangebyrank(name='redis:method:zadd', min=0, max=5)
print(rsp) # 1
zremrangebyscore
zremrangebyscore(name, min, max),
根据score删除在min和max指定的范围内的成员,返回成功删除的个数
示例
rsp = rs.zremrangebyscore(name='redis:method:zadd', min=10, max=20)
print(rsp) # 0
改
zincrby
zincrby(name, amount, value)
在原有值基础上增加amount,返回增加之后的值
1. amount可以为整型和浮点型
2. amount可以为负数
示例
rsp = rs.zincrby(name='zset', amount=10.6, value='value1')
print(rsp) # 10.0
查
zrank
zrank(name, value),
返回 value 在 name 中排名,按照分数从低到高排序,第一名为0,第二名为1,以此类推。
name or value 不存在,返回None,
相同的话,谁先添加谁排名高
示例
rsp = rs.zrank(name='zset', value='value1')
print(rsp) # 1
zrevrank
zrevrank(name, value),
返回 value 在 name 中排名,按照分数从高到低排序,第一名为0,第二名为1,以此类推。
name or value 不存在,返回None,
相同的话,谁先添加谁排名高
示例
rsp = rs.zrevrank(name='zset', value='value1')
print(rsp) # 3
zscore
zscore(name, value),
返回 value 在 name 中的分数,浮点类型
name or value 不存在,返回None,
示例
rsp = rs.zscore(name='zset', value='value2')
print(rsp) # 20.0
zcount
zcount(name, min, max),
统计name中成员分数在[min - max]中的个数
name 不存在 Or min、max不符合规则,返回0
示例
rsp = rs.zcount(name='zset', min=10, max=20)
print(rsp) # 2
zrange
zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
按照start和end指定的范围获取name中的成员
desc,表示是否要降序
withscores,表示是否返回分数
score_cast_func,表示将分数转换成什么类型
示例
不带分数
rsp = rs.zrange(name='zset', start=0, end=-1)
print(rsp) # ['value1', 'value2', 'value3', 'name']
带分数,并且转换成int类型
rsp = rs.zrange(name='zset', start=0, end=-1, withscores=True, score_cast_func=int)
print(rsp) # [('value1', 10.0), ('value2', 20.0), ('value3', 30.0), ('name', 40.0)]
降序
rsp = rs.zrange(name='zset', start=0, end=-1, desc=True, withscores=True, score_cast_func=int)
print(rsp) # [('name', 40), ('value3', 30), ('value2', 20), ('value1', 10)]
zrevrange
zrevrange(name, start, end, withscores=False, score_cast_fun=float)
在zrange的基础上,反序输出
示例
rsp = rs.zrevrange(name='zset', start=0, end=-1, withscores=True, score_cast_func=int)
print(rsp) # [('name', 40), ('value3', 30), ('value2', 20), ('value1', 10)]
zrangebyscore
zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
跟据分数来显示
start,表示偏移量,从哪个元素开始显示
num,表示个数,返回几个
withscores,表示时候要显示分数
score_cast_func,表示将分数转换成什么类型
示例
# 表示0 <= score <= 10
rsp = rs.zrangebyscore(name='zset', min=0, max=10, start=None, num=None, withscores=True, score_cast_func=int)
# 当想获取全部的数据,但是不知道上限和下限,可以使用-inf、+inf字符串
rsp = rs.zrangebyscore(name='zset', min='-inf', max='+inf', start=None, num=None, withscores=True, score_cast_func=int)
rsp = rs.zrangebyscore(name='zset', min=-float('inf'), max=+float('inf'), start=None, num=None, withscores=True, score_cast_func=int)
# 表示0 < score <= 50
rsp = rs.zrangebyscore(name='zset', min='(0', max='50', start=None, num=None, withscores=True, score_cast_func=int)
print(rsp) # [('value1', 10), ('value2', 20), ('value3', 30), ('name', 40)]
zrevrangebyscore
zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
在zrangebyscore的基础上,倒序
start,表示偏移量,从哪个元素开始显示
num,表示个数,返回几个
withscores,表示时候要显示分数
score_cast_func,表示将分数转换成什么类型
示例
rsp = rs.zrevrangebyscore(name='zset', max=50, min=10, start=1, num=2, withscores=True, score_cast_func=int)
print(rsp) # [('value3', 30), ('value2', 20)]
zcard
zcard(name),统计name中的成员个数
示例
rsp = rs.zcard(name='zset')
print(rsp) # 4
zscan_iter
zscan_iter(name, match=None, count=None, score_cast_func=float):
同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作
示例
for s in rs.zscan_iter(name='zset'):
print(s)
整体代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""sorted set类型操作
有序集合,成员唯一,分数(浮点型)可以重复
"""
import redis
pool = redis.ConnectionPool(host='192.168.1.104', password='hardy9sap', decode_responses=True)
rs = redis.Redis(connection_pool=pool)
is_connected = rs.ping()
# 增
# 1. zadd
# ===============================================================================
# zadd(name, mapping, nx=False, xx=False, ch=False, incr=False)
# 往name添加一个或多个带分数的成员,返回添加的成员个数;
# 默认情况下,如果是更新分数的话,返回0,因为不是添加
#
# nx:member必须不存在,才可以设置成功,用于添加.
#
# xx:member必须存在,才可以设置成功,用于添加.
#
# ch:返回此次操作后,有序结合元素和分数发生变化的个数.(默认不会对更新分数进行统计)
#
# incr: 对score进行添加操作,相当于后面介绍的zincrby. (在原有分数上增加)
# ==============================================================================
# if is_connected:
# rsp = rs.zadd(name='redis:method:zadd', mapping={
# 'value1': '12',
# 'value2': '20.5',
# 'value3': 30
# }) # 3
#
# print(rsp)
# 删
# 1. zrem
# =============================================================
# zrem(name, *args),从name中删除一个或多个成员,返回成功删除的个数
# =============================================================
# if is_connected:
# rsp = rs.zrem('redis:method:zadd', *('value1', 'value2', 'no:exists:value'))
# print(rsp) # 2
# 2. zremrangebyrank
# ======================================================
# zremrangebyrank(name, min, max),
# 根据rank删除在min和max指定的范围内的成员,返回成功删除的个数
# ======================================================
# if is_connected:
# rsp = rs.zremrangebyrank(name='redis:method:zadd', min=0, max=5)
# print(rsp) # 1
# 3. zremrangebyscore
# ======================================================
# zremrangebyscore(name, min, max),
# 根据score删除在min和max指定的范围内的成员,返回成功删除的个数
# ======================================================
# if is_connected:
# rsp = rs.zremrangebyscore(name='redis:method:zadd', min=10, max=20)
# print(rsp) # 0
# 改
# 1. zincrby
# =====================================
# zincrby(name, amount, value)
# 在原有值基础上增加amount,返回增加之后的值
# 1. amount可以为整型和浮点型
# 2. amount可以为负数
# ======================================
# if is_connected:
# rsp = rs.zincrby(name='zset', amount=10.6, value='value1')
# print(rsp) # 10.0
# 查
# 1. zrank
# ==========================================
# zrank(name, value),
# 返回 value 在 name 中排名,按照分数从低到高排序,第一名为0,第二名为1,以此类推。
# name or value 不存在,返回None,
# 相同的话,谁先添加谁排名高
# ==========================================
# if is_connected:
# rsp = rs.zrank(name='zset', value='value1')
# print(rsp) # 1
# 2. zrevrank
# ==========================================
# zrevrank(name, value),
# 返回 value 在 name 中排名,按照分数从高到低排序,第一名为0,第二名为1,以此类推。
# name or value 不存在,返回None,
# 相同的话,谁先添加谁排名高
# ==========================================
# if is_connected:
# rsp = rs.zrevrank(name='zset', value='value1')
# print(rsp) # 3
# 3. zscore
# ==========================================
# zscore(name, value),
# 返回 value 在 name 中的分数,浮点类型
# name or value 不存在,返回None,
# ==========================================
# if is_connected:
# rsp = rs.zscore(name='zset', value='value2')
# print(rsp) # 20.0
# 4. zcount
# ========================================
# zcount(name, min, max),
# 统计name中成员分数在[min - max]中的个数
# name 不存在 Or min、max不符合规则,返回0
# ========================================
# if is_connected:
# rsp = rs.zcount(name='zset', min=10, max=20)
# print(rsp) # 2
# 5. zrange
# ===========================================================================
# zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)
# 按照start和end指定的范围获取name中的成员
# desc,表示是否要降序
# withscores,表示是否返回分数
# score_cast_func,表示将分数转换成什么类型
# ============================================================================
# if is_connected:
# # 不带分数
# rsp = rs.zrange(name='zset', start=0, end=-1)
# print(rsp) # ['value1', 'value2', 'value3', 'name']
#
# # 带分数,并且转换成int类型
# rsp = rs.zrange(name='zset', start=0, end=-1, withscores=True, score_cast_func=int)
# print(rsp) # [('value1', 10.0), ('value2', 20.0), ('value3', 30.0), ('name', 40.0)]
#
# # 降序
# rsp = rs.zrange(name='zset', start=0, end=-1, desc=True, withscores=True, score_cast_func=int)
# print(rsp) # [('name', 40), ('value3', 30), ('value2', 20), ('value1', 10)]
# 6. zrevrange
# ==================================================================
# zrevrange(name, start, end, withscores=False, score_cast_fun=float)
# 在zrange的基础上,反序输出
# ==================================================================
# if is_connected:
# rsp = rs.zrevrange(name='zset', start=0, end=-1, withscores=True, score_cast_func=int)
# print(rsp) # [('name', 40), ('value3', 30), ('value2', 20), ('value1', 10)]
# 7. zrangebyscore
# ================================================================
# zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
# 跟据分数来显示
# start,表示偏移量,从哪个元素开始显示
# num,表示个数,返回几个
# withscores,表示时候要显示分数
# score_cast_func,表示将分数转换成什么类型
# ================================================================
# if is_connected:
# rsp = rs.zrangebyscore(name='zset', min=10, max=50, start=None, num=None, withscores=True, score_cast_func=int)
# print(rsp) # [('value1', 10), ('value2', 20), ('value3', 30), ('name', 40)]
# 8.zrevrangebyscore
# ================================================================
# zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
# 在zrangebyscore的基础上,倒序
# start,表示偏移量,从哪个元素开始显示
# num,表示个数,返回几个
# withscores,表示时候要显示分数
# score_cast_func,表示
# ================================================================
# if is_connected:
# rsp = rs.zrevrangebyscore(name='zset', max=50, min=10, start=1, num=2, withscores=True, score_cast_func=int)
# print(rsp) # [('value3', 30), ('value2', 20)]
# 9. zcard
# =======================================
# zcard(name),统计name中的成员个数
# =======================================
# if is_connected:
# rsp = rs.zcard(name='zset')
# print(rsp) # 4
# 10. zscan_iter
# =======================
# zscan_iter(name, match=None, count=None, score_cast_func=float):
# 同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作
# =======================
for s in rs.zscan_iter(name='zset'):
print(s)