Python操作Redis大全( 三 )


#!/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.zadd('z1', '11', 1, '22', 2, '33', 3, '44', 4, '55', 5, '66', 6, '66', 7) # 在name对应的有序集合中添加元素print(r.zcard('z1')) # 获取name对应的有序集合元素的数量print(r.zcount('z1', 1, 2)) # 获取name对应的有序集合中分数 在 [min,max] 之间的个数r.zincrby('z1', '11', amount=5) # 自增name对应的有序集合的 name 对应的分数print(r.zrange('z1', 0, -1, desc=False, withscores=True)) # 值11被排序到最后;此处表示按元素的值升序排列print(r.zrank('z1', 33)) # 获取某个值在 name对应的有序集合中的排行(从 0 开始)r.zrem('z1', '66') # 删除name对应的有序集合中值是values的成员print(r.zrange('z1', 0, -1, desc=False, withscores=True))r.zremrangebyrank('z1', 0, 1) # 根据排行范围删除print(r.zrange('z1', 0, -1, desc=False, withscores=True))r.zremrangebyscore('z1', 4.5, 5.5) # 根据分数范围删除print(r.zrange('z1', 0, -1, desc=False, withscores=True))print(r.zscore('z1', 11)) # 获取name对应有序集合中 value 对应的分数r.zadd("zset_name", "a1", 6, "a2", 2, "a3", 5)r.zadd('zset_name1', a1=7, b1=10, b2=5)'''获取两个有序集合的交集并放入dest集合 , 如果遇到相同值不同分数 , 则按照aggregate进行操作aggregate的值为: SUM MIN MAX'''r.zinterstore('zset_name2', ('zset_name', 'zset_name1'), aggregate='Sum')print(r.zrange('zset_name2', 0, -1, desc=False, withscores=True))输出结果如下:
62[(b'22', 2.0), (b'33', 3.0), (b'44', 4.0), (b'55', 5.0), (b'11', 6.0), (b'66', 6.0)]1[(b'22', 2.0), (b'33', 3.0), (b'44', 4.0), (b'55', 5.0), (b'11', 6.0)][(b'44', 4.0), (b'55', 5.0), (b'11', 6.0)][(b'44', 4.0), (b'11', 6.0)]6.0[(b'a1', 13.0)]五、哈希 hashes
Redis 数据库hash数据类型是一个string类型的key和value的映射表 , 适用于存储对象 。 redis 中每个hash可以存储键值对多达40亿 。 Python的redis模块实现了Redis哈希(Hash)命令行操作的几乎全部命令 , 包括HDEL、HEXISTS、HGET、HGETALL、HINCRBY、HKEYS、HLEN 、HMGET 、HMSET 、HSET 、HSETNX 、HVALS 、HINCRBYFLOAT等命令 。 函数说明如下:

  1. HDEL:删除对应哈希(Hash)表的指定键(key)的字段 , hdel(self, name, key)
  2. HEXISTS:检测哈希(Hash)表对应键(key)字段是否存在 , 返回布尔逻辑 , hexists(self, name, key)
  3. HGET:获取哈希(Hash)指定键(key)对应的值 , hget(self, name, key)
  4. HGETALL:获取哈希(Hash)表的键-值对(key-value pairs),返回python字典类型数据 , hgetall(self, name)
  5. HINCRBY:为哈希表(Hash)指定键(key)对应的值(key)加上指定的整数数值(int , 可为负值)hincrby(self>, name, key, amount=1) , Redis 中本操作的值被限制在 64 位(bit)有符号数字 。
  6. HKEYS:返回哈希表(Hash)对应键(key)的数组(Python称之为列表List) , hkeys(self, name)
  7. HLEN: 获取哈希表(Hash)中键-值对(key-value pairs)个数 , hlen(self, name)
  8. HMGET:获取哈希表(Hash)中一个或多个给点字段的值 , 不存在返回nil(Redis命令行)/None(Python) , hmget(self, name, keys) , 其中keys可以为列表(list)
  9. HMSET:设置对个键-值对(key-value pairs)到哈希表(Hash)中 , python输入值(mapping)为字典(dictionary)类型 , hmset(self, name, mapping)
  10. HSET:为哈希表(Hash)赋值 , 若键(key)存在值(value)则覆盖 , 不存在则创建 , hset(self, name, key, value)
  11. HSETNX:为哈希表(Hash)不存值(value)的键(key)赋值 , 存在操作无效 , 对应值(value)无变化 , hsetnx(self, name, key, value)
  12. HVALS:返回哈希表(Hash)对应值(value)的列表 , hvals(self, name)
  13. HINCRBYFLOAT:为哈希表 key 中的指定字段的浮点数值加上增量 increment, hincrbyfloat(self, name, key, amount=1.0)
示例代码如下:
#!/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.hset('n1', 'k1', 'v1') # hset(name, key, value),name对应的hash中设置一个键值对(不存在 , 则创建;否则 , 修改)print(r.hget('n1', 'k1'))r.hmset('n2', {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}) # hmset(name, mapping),在name对应的hash中批量设置键值对print(r.hmget('n2', 'k2'))print(r.hgetall('n2')) # 获取name对应hash的所有键值print(r.hlen('n2')) # 获取name对应的hash中键值对的个数print(r.hkeys('n2')) # 获取name对应的hash中所有的key的值print(r.hvals('n2')) # 获取name对应的hash中所有的value的值print(r.hexists('n2', 'k4')) # 检查name对应的hash是否存在当前传入的keyr.hdel('n2', 'k3') # 将name对应的hash中指定key的键值对删除r.hset('n3', 'k1', 1)r.hincrby('n3', 'k1', amount=1) # hincrby(name, key, amount=1),自增name对应的hash中的指定key的value的值 , 不存在则创建key=amountprint(r.hgetall('n3'))