13、Python3 Redis Hash
作者:互联网
Redis hash
是一个键值(key=>value
)对集合。
Redis hash
是一个 string
类型的 field
和 value
的映射表,hash
特别适合用于存储对象。Redis
中每个 hash
可以存储 2^32 - 1
键值对(40多亿)。
Hash
基本命令:
1、单个增加/取出
(1)单个增加
hset(key, field, value)
返回值
如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
参数
key
:Redis
中的key
field
:key
对应的hash
中的field
value
:name
对应的hash
中的value
注: hsetnx(key, field, value)
,当key
对应的hash
中不存在当前field
时则创建(相当于添加)
(2)单个取出
hget(key, field)
返回值
返回给定字段的值。如果给定的字段或field
不存在时,返回 None
。
参数
key
:Redis
中的key
field
:key
对应的hash中的field
示例
import redis
import time
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
r.hset("hash1", "k1", "v1”)
r.hset("hash1", "k2", "v2”)
print(r.hkeys("hash1")) # 取hash1中所有的key
print(r.hget("hash1", "k1")) # 单个取hash1的key对应的值
print(r.hmget("hash1", "k1", "k2")) # 多个取hash1的key对应的值
r.hsetnx("hash1", "k2", "v3") # 只能新建
print(r.hget("hash1", "k2"))
2、批量增加/取出
(1)批量增加
该命令用于同时将多个 field-value
(字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 hmset
操作。
hmset(key, mapping)
返回值
如果命令执行成功,返回 OK
。
参数
key
:redis
的key
mapping
:字典,如:{‘k1’:‘v1’, ‘k2’: ‘v2’}
(2)批量取出
该命令用于返回哈希表中,一个或多个给定字段的值。
如果指定的字段不存在于哈希表,那么返回一个None值。
hmget(key, fields, *args)
返回值
一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。
参数
key
:reids
对应的key
fields
:要获取field
集合,如:['k1', 'k2', 'k3']
*args
:要获取的key
,如:k1,k2,k3
示例
r.hmset("hash2", {"k2": "v2", "k3": "v3"})
print(r.hmget("hash2", "k2", "k3")) # 批量取出"hash2"的key-k2 k3对应的value —方1
print(r.hmget("hash2", ["k2", "k3"])) # 批量取出"hash2"的key-k2 k3对应的value --方式2
3、取出所有的键值对
hgetall(key)
获取key
对应hash
的所有键值对,若key
不存在,返回空列表。
print(r.hgetall(‘hash1’))
4、获取所有键值对的格式hash
长度
hlen(key)
获取key
对应的hash
中,键值对的个数,当key
不存在时,返回0。
print(r.hlen(‘hash1'))
5、获取所有的keys
(类似字典的取所有keys
)
hkeys(key)
获取key
对应的hash
中所有的field
的值,当key
不存在时,返回一个空列表
print(r.keys(‘hash1'))
6、得到所有的value
hvals(key)
获取key
对应的hash
中所有field
等值,如果key
不存在,则返回空列表
print(r.hvals(‘hash1'))
7、判断成员是否存在
hexists(key, field)
返回值
如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key
不存在,返回 0 。
print(r.hexists(‘hash1’, ‘k4’)) # 不存在返回False
print(r.hexists(‘hash1’, ‘k1’)) # 存在返回True
8、删除键值对
hdel(key, *fields)
返回值
被成功删除字段的数量,不包括被忽略的字段。
print(r.hgetall("hash1"))
r.hset("hash1", "k2", "v222") # 修改已有的key k2
r.hset("hash1", "k11", "v1") # 新增键值对 k11
r.hdel("hash1", "k1") # 删除一个键值对
print(r.hgetall("hash1"))
9、自增自减整数
将key
对应的value
–整数 自增1或者2,或者别的整数 负数就是自减
hincrby(key, field, amount=1)
自增name
对应的hash
中的指定key
的值,不存在则创建key
,并初始化value
值为0
返回值
执行 HINCRBY
命令之后,哈希表中字段的值。
参数
key
:redis
中的key
field
:hash
对应的field
amount
:自增数(整数)
示例
r.hset("hash1", "k3", 123)
r.hincrby("hash1", "k3", amount=-1)
print(r.hgetall("hash1"))
r.hincrby("hash1", "k4", amount=1) # 不存在的话,value默认就是1
print(r.hgetall("hash1"))
10、自增自减浮点数
将key
对应的value
–浮点数 自增1.0或者2.0,或者别的浮点数 负数就是自减
hincrbyfloat(key, field, amount=1.0)
自增key
对应的hash
中的指定field
的值,不存在则创建key
,并初始化value
值为0
返回值
执行 HINCRBY
命令之后,哈希表中字段的值。
参数
key
:redis
中的key
field
:hash
对应的field
amount
,自增数(浮点数)
示例
r.hset("hash1", "k5", "1.0")
r.hincrbyfloat("hash1", "k5", amount=-1.0) # 已经存在,递减-1.0
print(r.hgetall("hash1"))
r.hincrbyfloat("hash1", "k6", amount=-1.0) # 不存在,value初始值是-1.0 每次递减1.0
print(r.hgetall("hash1"))
标签:13,Hash,Redis,value,field,hash1,key,print,hash 来源: https://blog.csdn.net/sinat_33924041/article/details/100165046