Python3中redis模块学习之sorted set数据类型操作

起步

#!/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删除在minmax指定的范围内的成员,返回成功删除的个数

示例

rsp = rs.zremrangebyrank(name='redis:method:zadd', min=0, max=5)

print(rsp)  # 1

zremrangebyscore

zremrangebyscore(name, min, max),
根据score删除在minmax指定的范围内的成员,返回成功删除的个数

示例

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 minmax不符合规则,返回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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值