哈希hash的操作
哈希Hash
hash表现形式,有些像pyhton中的dict,可以存储一组关联性较强的数据。
方法中 name
对应字符串,key
指的是hash中的key,value
是hsah的value;value只能是字符串(包括bytes)、数字格式。不能嵌套hash
#1【重点】 hset(name, key=None, value=None, mapping=None)
name对应的hash中设置一个键值对(不存在,则创建;否则,更新修改)
参数:
name,redis的name
key,name对应的hash中的key
value,name对应的hash中的value
mapping, 批处理设置键值对,py38以后批量插入使用hset,启用hmset
如:
r.hset('info', 'name', 'xliu') # info ---> {'name':'xliu'}
r.hset('yyy',mapping={'x1':'o1', 'x2':'o2'})
#2 hsetnx(name, key, value)
当name对应的hash中不存在当前key时则创建(相当于添加),并返回1;存在则不处理,返回0
#3 hmset(name, mapping)
在name对应的hash中批量设置键值对
参数:
name,redis的name
mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
如:
r.hmset('xx', {'k1':'v1', 'k2': 'v2'})
注意:将要被hset代替
r.hset('yyy',mapping={'x1':'o1', 'x2':'o2'})
#4【重点】 hget(name,key)
获取name这个hash中key键对应的值
#5【重点】 hmget(name, keys, *args)
在name对应的hash中获取多个key的值,列表的形式返回
参数:
name,reids对应的name
keys,要获取key集合,如:['k1', 'k2', 'k3']
*args,要获取的key,如:k1,k2,k3
如:
r.mget('yyy', ['x1', 'x2'])
print r.hmget('yyy', 'x1', 'x2') # [b'o1', b'o2']
#6 hgetall(name)
获取name对应hash的所有键值对,【慎用:数据量太大会撑爆内存】
如:
print(r.hgetall('yyy')) # {b'x1': b'o1', b'x2': b'o2'}
#7 hlen(name)
获取name对应的hash中键值对的个数
#8 hkeys(name)
获取name对应的hash中所有的key的值
如
print(r.hkeys('yyy')) # [b'x1', b'x2']
#9 hvals(name)
获取name对应的hash中所有的value的值
#10 hexists(name, key)
检查name对应的hash是否存在当前传入的key,返回布尔值
#11 hdel(name, *keys)
将name对应的hash中指定key的键值对删除,支持删除多个
如
r.hdel('info', 'name', 'age')
#12【重点】 hincrby(name, key, amount=1)
自增name对应的hash中的指定key的值,不存在则创建key=amount
参数:
name,redis中的name
key, hash对应的key
amount,自增数(整数)
#13 hincrbyfloat(name, key, amount=1.0)
自增name对应的hash中的指定key的值,不存在则创建key=amount
参数:
name,redis中的name
key, hash对应的key
amount,自增数(浮点数)
#14【重点】 hscan_iter(name, match=None, count=None)
利用yield封装hscan创建生成器,实现分批去redis中获取数据
参数:
match,匹配指定key,默认None 表示所有的key
count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
如:
for item in r.hscan_iter('xx'):
print(item) # 打印所有的key-value键值对
for item in r.hscan_iter('xx', match='k1'):
print(item) # 打印k1这个键和其对应的值