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

起步

#!/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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python使用Redis可以通过导入redis模块来实现。首先,你需要建立一个Redis连接对象,可以使用以下方式进行连接:\[1\]。你可以指定Redis的主机、端口、密码和数据库等参数。接下来,你可以使用该连接对象执行各种Redis操作。例如,你可以使用set方法设置一个键值对,使用get方法获取键对应的值,使用incr方法对一个键的值进行自增操作等。\[2\]此外,你还可以使用连接池来实现多个Redis实例共享一个连接池,这样可以提高连接的效率。\[3\]在Redis,还有许多其他的基本命令可以使用,例如String类型的命令可以用来操作字符串数据。 #### 引用[.reference_title] - *1* [Python操作Redis详解](https://blog.csdn.net/csdnhxs/article/details/122450575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python redis 使用教程](https://blog.csdn.net/Gherbirthday0916/article/details/127430290)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值