Python操作Redis大全( 二 )

输出结果如下:
2[b'0', b'88', b'11'][b'0', b'11']b'0'b'11'[b'22', b'33', b'44'][b'44', b'22', b'33'][b'33', b'44', b'22'](b'l1', b'33')[b'44', b'22']自定义增量迭代:b'11'b'22'b'33'b'44'b'55'三、集合 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+)输出结果如下:
3{b'v3', b'v1'}{b'v3', b'v1'}{b'v2'}{b'v2'}{b'v3', b'v2', b'v4', b'v1'}{b'v3', b'v2', b'v4', b'v1'}False{b'v3', b'v2', b'v4', b'v1'}b'v2'b'v3'四、有序集合 sorted sets
命令描述Redis Zadd 命令向有序集合添加一个或多个成员 , 或者更新已存在成员的分数Redis Zcard 命令获取有序集合的成员数Redis Zcount 命令计算在有序集合中指定区间分数的成员数Redis Zincrby 命令有序集合中对指定成员的分数加上增量 incrementRedis Zinterstore 命令计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中Redis Zlexcount 命令在有序集合中计算指定字典区间内成员数量Redis Zrange 命令通过索引区间返回有序集合成指定区间内的成员Redis Zrangebylex 命令通过字典区间返回有序集合的成员Redis Zrangebyscore 命令通过分数返回有序集合指定区间内的成员Redis Zrank 命令返回有序集合中指定成员的索引Redis Zrem 命令移除有序集合中的一个或多个成员Redis Zremrangebylex 命令移除有序集合中给定的字典区间的所有成员Redis Zremrangebyrank 命令移除有序集合中给定的排名区间的所有成员Redis Zremrangebyscore 命令移除有序集合中给定的分数区间的所有成员Redis Zrevrange 命令返回有序集中指定区间内的成员 , 通过索引 , 分数从高到底Redis Zrevrangebyscore 命令返回有序集中指定分数区间内的成员 , 分数从高到低排序Redis Zrevrank 命令返回有序集合中指定成员的排名 , 有序集成员按分数值递减(从大到小)排序Redis Zscore 命令返回有序集中 , 成员的分数值Redis Zunionstore 命令计算给定的一个或多个有序集的并集 , 并存储在新的 key 中Redis Zscan 命令迭代有序集合中的元素(包括元素成员和元素分值)示例代码如下: