python redis详解(四)HASH哈希

本文详细介绍了Redis中的HASH数据类型,它是一个键值对集合,适合存储对象。文章对比了Python操作Redis HASH的函数与Redis命令行,并列举了各种操作,包括设置和获取字段值、增加字段值、检查字段存在性以及批量操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HASH哈希

Redis hash 是一个键值对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

类似于python dict 常用的json格式数据

python redis提供的方法与命令行基本一致, 具体的函数及含义可以参考给定的命令行来使用, 对应的函数名称与命令名称基本一致

命令

首先了解官方的命令, 具体如下:

1 HDEL key field2 [field2] 删除一个或多个哈希表字段
2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
3 HGET key field 获取存储在哈希表中指定字段的值/td>
4 HGETALL key 获取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量increment 。
7 HKEYS key 获取所有哈希表中的字段
8 HLEN key 获取哈希表中字段的数量
9 HMGET key field1 [field2] 获取所有给定字段的值
10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13 HVALS key 获取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。
15 HSTRLEN 长度 返回与field存储在的哈希关联的值的字符串长度key。如果key或field不存在,则返回0


python-redis

python操作redis hash类型提供一些函数, 函数名称与命令基本一致,可以参考命令进行使用

1.def hset(self, name, key, value)
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

print rediscli.hset('hms1', 'x1', 'tr1')
print rediscli.hget('hms1', 'x1')

输出:
1
tr1

2.def hsetnx(self, name, key, value
key不存在时才进行设置

print rediscli.hsetnx('hms1', 'x1', 'new1')
print rediscli.hget('hms1', 'x1')

输出结果:
0
tr1

3.hmset(name, mapping)
批量设置键值对
mapping为dict类型,如:{‘x1’: ‘12x’}

print rediscli.hmset("hms2", {'b1': 'x1', 'b2': 'x2'})
print rediscli.hget('hms2', 'b1')
print rediscli.hmget(name='hms2', keys=['b1', 'b2'])

输出:

True
x1
['x1', 'x2']

4.hget(name,key)
在name中获取key的值

5.hmget(name, keys, *args)
在name对应的hash中获取多个key的值

keys,获取的key列表,如:['x1', 'x2']
*args,要获取的key,如:x1, x2, x3
如:
r.mget('xx', ['k1', 'k2'])
或
print r.hmget('xx', 'k1', 'k2')

6.hgetall(name)
获取name对应hash的所有键值

print rediscli.hgetall("hms2")

7.hlen(name)
获取name键的长度

8.hkeys(name)
获取name对应的hash中所有的key的值

9.hvals(name)
获取name所有的value的值

10.hexists(name, key)
检查KEY是否存在

print rediscli.hexists('hms2', 'x1')

11.hdel(name,*keys)
将key删除

print rediscli.hset('hms3', 'km2', 'hgf')
print rediscli.hdel('hms3', 'km2')
print rediscli.hgetall("hms3")

输出:
1
1
{'km1': '5'}

12.hincrby(name, key, amount=1)
将key做加法, 加上amount
amount,自增数(整数)

print rediscli.hset("hms3", 'km1', 3)
print rediscli.hincrby('hms3', 'km1', amount=2)
print rediscli.hget('hms3', 'km1')

输出:
0
5
5

13.hincrbyfloat(name, key, amount=1.0)
将key加上amount

14.hscan(name, cursor=0, match=None, count=None)

增量式迭代获取,
大于大数据量时优化有用,可以实现分片的获取数据,并非一次性将数据全部获取完

cursor,游标(基于游标分批取获取数据)
match,匹配规则,默认None为所有的值
count  获取的数量, 默认None, 则使用redis默认的分页count数目

cursor1, data1 = rediscli.hscan(‘xxx’, cursor=0)
cursor2, data1 = rediscli.hscan(‘xxx’, cursor=cursor1)
返回值cursor的值为0时,表示数据已经通过分片获取完毕


print rediscli.hscan("hms3")

15.hscan_iter(name, match=None, count=None)

利用生成器获取值
match,匹配规则,默认None为所有的值
count  获取的数量, 默认None, 则使用redis默认的分页count数目
如:
for key in rediscli.hscan_iter(‘xx’):
	print(key)
示例程序
# coding:utf-8

import redis

rediscli = redis.Redis(host='127.0.0.1', port=6379, db=13)

print rediscli.hset('hms1', 'x1', 'tr1')
print rediscli.hget('hms1', 'x1')
print rediscli.hsetnx('hms1', 'x1', 'new1')
print rediscli.hget('hms1', 'x1')

print rediscli.hmset("hms2", {'b1': 'x1', 'b2': 'x2'})
print rediscli.hget('hms2', 'b1')
print rediscli.hmget(name='hms2', keys=['b1', 'b2'])
print rediscli.hgetall("hms2")

print rediscli.hlen('hms2')
print rediscli.hkeys('hms2')
print rediscli.hvals('hms2')
print rediscli.hexists('hms2', 'x1')
print rediscli.hset("hms3", 'km1', 3)

print rediscli.hincrby('hms3', 'km1', amount=2)
print rediscli.hget('hms3', 'km1')
print rediscli.hset('hms3', 'km2', 'hgf')
print rediscli.hdel('hms3', 'km2')
print rediscli.hgetall("hms3")
print rediscli.hscan("hms3")

输出结果:

0
tr1
0
tr1
True
x1
['x1', 'x2']
{'b1': 'x1', 'b2': 'x2'}
2
['b1', 'b2']
['x1', 'x2']
False
0
5
5
1
1
{'km1': '5'}
(0L, {'km1': '5'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值