Python操作Redis大全( 三 )

三、集合 sets
Redis 数据库集合对象(set object)是由string类型的无重复元素的无需集合 , 底层编码可以是intset或者hashtable 。 intset编码的集合对象用整数集合最为底层实现 , 所有对象元素保存在整数集合中 。 Python的redis模块实现了 SADD、SCARD 、SDIFF 、SDIFFSTORE、SINTER 、SINTERSTORE、SISMEMBER 、SMEMBERS 、SMOVE、SPOP、SRANDMEMBER、SREM、SUNION、SUNIONSTORE操作命令的基本用法 。 函数说明如下:

  1. SADD:向集合对象添加成员 , sadd(self, name, value)
  2. SCARD:获取集合元素个数 , scard(self, name)
  3. SDIFF:返回给定多个集合对象的差集(set key1-set key2..-set keyn) , 从左到右计算集合差集 , sdiff(self, keys, *args)
  4. SDIFFSTORE:返回给定给定多个集合对象的差集并存储在目标(dest)集合中 , sdiffstore(self, dest, keys, *args)
  5. SINTER:返回给定所有集合(keys,args)的交集, sinter(self, keys, args)
  6. SINTERSTORE:返回给定所有集合(keys,args)的交集并存储在 集合(dest) 中, sinterstore(self, dest, keys, args)
  7. SISMEMBER:判断 value元素是否是集合 name 的成员,返回布尔逻辑值True或者False , sismember(self, name, value)
  8. SMEMBERS:返回集合中所元素值的Python集合类型数据 , smembers(self, name)
  9. SMOVE:将元素value从集合src移动到 集合 dest 。 若元素value在集合src中不存在 , 则集合dest中不会添加元素value ,smove(self, src, dest, value)
  10. SPOP:移除并返回集合中的一个随机元素, spop(self, name)
  11. SRANDMEMBER:返回集合中一个随机数 , 但是不做移除操作, srandmember(self, name) 。 从Redis 2.6 版本开始 ,在命令行下Srandmember 命令接受可选返回元素数量的参数 redis>SRANDMEMBER name count
  12. SREM:移除集合中一个元素 , srem(self, name, value) , redis模块任然沿用Redis 2.4 版本以前的只接受单个元素的用法 。
  13. SUNION:返回所有给定集合的并集中所有元素 , sunion(self, keys, *args)
  14. SUNIONSTORE:所有给定集合的并集存储在集合dest 中, sunionstore(self, dest, keys, *args)
  15. SSCAN:迭代集合中的元素 , sscan(self, name, cursor=0, match=None, count=None)
示例代码如下:
#!/usr/bin/python# -*- coding:utf-8 -*-# __author__ = 'Jack'pool = redis.ConnectionPool(host='127.0.0.1', port=6379)r = redis.Redis(connection_pool=pool)r.flushall # 清空Redisr.sadd('s1', 'v1', 'v1', 'v2', 'v3') # name对应的集合中添加元素r.sadd('s2', 'v2', 'v4') # name对应的集合中添加元素print(r.scard('s1')) # 获取name对应的集合中元素个数print(r.sdiff('s1', 's2')) #在第一个name对应的集合中且不在其他name对应的集合的元素集合r.sdiffstore('s3', 's1', 's2') # 获取第一个name对应的集合中且不在其他name对应的集合 , 再将其新加入到dest对应的集合中print(r.smembers('s3')) # 获取s3对应的集合的所有成员print(r.sinter('s1', 's2')) # 获取s1, s2对应集合的交集r.sinterstore('s4', 's1', 's2') # 获取s1, s2对应集合的交集 , 并将其存放到集合是s4中print(r.smembers('s4'))print(r.sunion('s1', 's2')) # 获取s1, s2对应集合的并集r.sunionstore('s5', 's1', 's2') # 获取s1, s2对应集合的交集 , 并将其存放到集合是s5中print(r.smembers('s5'))print(r.sismember('s4', 'v4')) # 检查value是否是name对应的集合的成员r.smove('s2', 's1', 'v4') # 将集合s2中成员v4移至集合s1中print(r.smembers('s1'))r.srem('s1', 'v1') # 在name对应的集合中删除某些值print(r.spop('s1')) # 从集合的右侧(尾部)移除一个成员 , 并将其返回 注意:集合是无序的 , 故结果随机!print(r.srandmember('s1')) # 从name对应的集合中随机获取 numbers 个元素(Redis 2.6+)