目录
起步
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""set类型操作
集合,唯一、无序
"""
import redis
pool = redis.ConnectionPool(host='192.168.1.104', password='hardy9sap', decode_responses=True)
rs = redis.Redis(connection_pool=pool)
# socket_connect_timeout,连接超时,对应的异常redis.exceptions.ConnectionError
# socket_timeout,响应数据超时
is_connected = rs.ping()
增
sadd
sadd(name, *values),往name中添加一个或多个成员,返回添加的成员个数
如果没有成员被添加,返回0
示例
rsp = rs.sadd('redis:method:sadd', *('value1', 'value2', 'value3'))
print(rsp) # 3
删
srem
srem(name, *values),从name中删除一个或多个成员,返回成功删除的个数
示例
rsp = rs.srem('redis:method:sadd', *('value1', 'value2', 'no:exists:value'))
print(rsp) # 2
spop
spop(name, count=None),随机地从name中删除一个成员并返回,默认删除1个,
注意:count=None,返回1个,字符串类型,例如:'value1'
count=1,返回1个,列表类型,例如:['value1']
如果name为空,返回None,
如果count超过总大小,最大限度删除
示例
rsp = rs.spop(name='redis:method:sadd', count=None)
print(rsp) # value1
rsp = rs.spop(name='redis:method:sadd', count=2)
print(rsp) # ['value3', 'value2']
srandmember
是返回哦,不是删除
srandmember(name, number=None),随机地从name中返回一个成员,默认返回1个,
注意:number=None,返回1个,字符串类型,例如:'value1'
number=1,返回1个,列表类型,例如:['value1']
如果name为空,返回None,
如果count超过总大小,尽最大能力返回
count还可以为负数,但是可能有重复
示例
rsp = rs.srandmember(name='redis:method:sadd', number=None)
print(rsp) # value3
rsp = rs.srandmember(name='redis:method:sadd', number=3)
print(rsp) # ['value1', 'value3', 'value2']
smove
smove(src, dst, value),把alue从source移动到destination,
移动成功(只要value在source存在即可),返回1,失败(value在source中不存在),返回0
当 destination 集合已经包含 member 元素时, smove 命令只是简单地将 source 集合中的 value 元素删除。
示例
rsp = rs.smove(src='set1', dst='set2', value='2')
print(rsp) # True
查
scard
scard(name),统计name中的成员个数
示例
rsp = rs.scard(name='set2')
print(rsp) # 3
smembers
smembers(name),返回name中所有的成员,返回集合类型
示例
rsp = rs.smembers(name='set2')
print(rsp) # {'1', '2', '3'}
sismember
sismember(name, value),判断value是否是name的成员,是,返回True,否,返回False
示例
rsp = rs.sismember(name='set2', value='5')
print(rsp) # False
sscan_iter
sscan_iter(name, match=None, count=None):同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
示例
for s in rs.sscan_iter(name='set2'):
print(s)
集合运算
交集
sinter
sinter(keys, *args),将共同的成员返回,集合类型
示例
rsp = rs.sinter(keys=('set1', 'set2'))
print(rsp) # {'3'}
sinterstore
sinterstore(dest, keys, *args),将共同的成员存储到dest中,返回存储之后的个数
示例
rsp = rs.sinterstore(dest='set3', keys=('set1', 'set2'))
print(rsp) # 1
print(rs.smembers(name='set3')) # {'3'}
差集
sdiff
sdiff(keys, *args),keys做差集,去掉key1中在其他集合中存在的成员,剩下的成员返回
示例
rsp = rs.sdiff(keys=('set2', 'set3'))
print(rsp) # {'1', '2'} --> set2 - set3
sdiffstore
sdiffstore(dest, keys, *args),将差集的结果存储到dest中,返回存储之后的个数
示例
rsp = rs.sdiffstore(dest='set4', keys=('set2', 'set3'))
print(rsp) # 2
print(rs.smembers(name='set4'))
并集
sunion
sunion(keys, *args),将多个集合的成员合并,并且返回
示例
rsp = rs.sunion(keys=('set1', 'set2', 'set3', 'set4'))
print(rsp) # {'3', '2', '1'}
sunionstore
sunionstore(dest, keys, *args),将合并的成员存储到dest中,返回存储之后的个数
示例
rsp = rs.sunionstore(dest='set5', keys=('set1', 'set2', 'set3', 'set4'))
print(rsp) # 3
print(rs.smembers(name='set5')) # {'1', '3', '2'}
整体代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""set类型操作
集合,唯一、无序
"""
import redis
pool = redis.ConnectionPool(host='192.168.1.104', password='hardy9sap', decode_responses=True)
rs = redis.Redis(connection_pool=pool)
# socket_connect_timeout,连接超时,对应的异常redis.exceptions.ConnectionError
# socket_timeout,响应数据超时
is_connected = rs.ping()
# 增
# 1. sadd
# ================================================================
# sadd(name, *values),往name中添加一个或多个成员,返回添加的成员个数
# 如果没有成员被添加,返回0
# ================================================================
# if is_connected:
# rsp = rs.sadd('redis:method:sadd', *('value1', 'value2', 'value3'))
# print(rsp) # 3
# 删
# 1. srem
# ==================================================================
# srem(name, *values),从name中删除一个或多个成员,返回成功删除的个数
# ===================================================================
# if is_connected:
# rsp = rs.srem('redis:method:sadd', *('value1', 'value2', 'no:exists:value'))
# print(rsp) # 2
# 2. spop
# ===================================================================
# spop(name, count=None),随机地从name中删除一个成员并返回,默认删除1个,
# 注意:count=None,返回1个,字符串类型,例如:'value1'
# count=1,返回1个,列表类型,例如:['value1']
# 如果name为空,返回None,
# 如果count超过总大小,最大限度删除
# ===================================================================
# if is_connected:
# rsp = rs.spop(name='redis:method:sadd', count=None)
# print(rsp) # value1
#
# rsp = rs.spop(name='redis:method:sadd', count=2)
# print(rsp) # ['value3', 'value2']
# 3. srandmember
# ===============================================================
# srandmember(name, number=None),随机地从name中返回一个成员,默认返回1个,
# 注意:number=None,返回1个,字符串类型,例如:'value1'
# number=1,返回1个,列表类型,例如:['value1']
# 如果name为空,返回None,
# 如果count超过总大小,尽最大能力返回
# ===============================================================
# if is_connected:
# rsp = rs.srandmember(name='redis:method:sadd', number=None)
# print(rsp) # value3
#
# rsp = rs.srandmember(name='redis:method:sadd', number=3)
# print(rsp) # ['value1', 'value3', 'value2']
# 4. smove
# ================================================================================================
# smove(src, dst, value),把alue从source移动到destination,
# 移动成功(只要value在source存在即可),返回1,失败(value在source中不存在),返回0
# 当 destination 集合已经包含 member 元素时, smove 命令只是简单地将 source 集合中的 value 元素删除。
# =================================================================================================
# if is_connected:
# rsp = rs.smove(src='set1', dst='set2', value='2')
# print(rsp) # True
# 查
# 1. scard
# =========================================================
# scard(name),统计name中的成员个数
# =========================================================
# if is_connected:
# rsp = rs.scard(name='set2')
# print(rsp) # 3
# 2. smembers
# =====================================================
# smembers(name),返回name中所有的成员,返回集合类型
# =====================================================
# if is_connected:
# rsp = rs.smembers(name='set2')
# print(rsp) # {'1', '2', '3'}
# 3. sismember
# =====================================================================
# sismember(name, value),判断value是否是name的成员,是,返回True,否,返回False
# =====================================================================
# if is_connected:
# rsp = rs.sismember(name='set2', value='5')
# print(rsp) # False
# 4. sscan_iter
# ===========================
# sscan_iter(name, match=None, count=None):同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
# ===========================
# for s in rs.sscan_iter(name='set2'):
# print(s)
# 集合运算
# 交集
# 1. sinter
# ================================================
# sinter(keys, *args),将共同的成员返回,集合类型
# ================================================
# if is_connected:
# rsp = rs.sinter(keys=('set1', 'set2'))
# print(rsp) # {'3'}
# 2. sinterstore
# =========================================================================
# sinterstore(dest, keys, *args),将共同的成员存储到dest中,返回存储之后的个数
# =========================================================================
# if is_connected:
# rsp = rs.sinterstore(dest='set3', keys=('set1', 'set2'))
# print(rsp) # 1
#
# print(rs.smembers(name='set3')) # {'3'}
# 差集
# 1. sdiff
# =============================================================================
# sdiff(keys, *args),keys做差集,去掉key1中在其他集合中存在的成员,剩下的成员返回
# =============================================================================
# if is_connected:
# rsp = rs.sdiff(keys=('set2', 'set3'))
# print(rsp) # {'1', '2'} --> set2 - set3
# 2. sdiffstore
# =============================================================================
# sdiffstore(dest, keys, *args),将差集的结果存储到dest中,返回存储之后的个数
# =============================================================================
# if is_connected:
# rsp = rs.sdiffstore(dest='set4', keys=('set2', 'set3'))
# print(rsp) # 2
#
# print(rs.smembers(name='set4'))
# 并集
# 1. sunion
# =============================================================================
# sunion(keys, *args),将多个集合的成员合并,并且返回
# =============================================================================
# if is_connected:
# rsp = rs.sunion(keys=('set1', 'set2', 'set3', 'set4'))
# print(rsp) # {'3', '2', '1'}
# 2. sunionstore
# =============================================================================
# sunionstore(dest, keys, *args),将合并的成员存储到dest中,返回存储之后的个数
# =============================================================================
# if is_connected:
# rsp = rs.sunionstore(dest='set5', keys=('set1', 'set2', 'set3', 'set4'))
# print(rsp) # 3
#
# print(rs.smembers(name='set5')) # {'1', '3', '2'}
rs.close()