目錄
- 起步
- 增
-
- zadd
- 删
-
- zrem
- zremrangebyrank
- zremrangebyscore
- 改
-
- zincrby
- 查
-
- zrank
- zrevrank
- zscore
- zcount
- zrange
- zrevrange
- zrangebyscore
- zrevrangebyscore
- zcard
- zscan_iter
- 整體代碼
起步
#!/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)