Redis学习笔记【05】 - 哈希

本文详细介绍了Redis中哈希类型的使用方法,包括设置值、获取值、删除字段、计算字段数量等常见操作,并分析了各命令的时间复杂度,适合Redis初学者及开发者阅读。

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

一、简介

几乎所有的语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value={{field1,value1},…{fieldN,valueN}},Redis键值对和哈希类型二者的关系可以如下图表示:

Tip:哈希类型中的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value在不同上下文的作用。

二、命令

1、设置值

hset key field value

下面为user:1添加一对于field-value:

127.0.0.1:6379> hset user:1 name nosee
(integer) 1

如果设置成功会返回1,反之会返回0。此外Redis提供了hsetnx命令,它们的关系就像set和setnx命令一样,只不过作用域由键变为field。

2、获取值

hget key field

如:

127.0.0.1:6379> hget user:1 name
"nosee"

如果field不存在则会返回nil:

127.0.0.1:6379> hget user:2 name
(nil)
127.0.0.1:6379> hget user:1 age
(nil)

3、删除field

hdel key field [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数,如:

127.0.0.1:6379> hdel user:1 name
(integer) 1
127.0.0.1:6379> hdel user:1 age
(integer) 0

4、计算field个数

hlen key

如:

127.0.0.1:6379> hset user:1 name nosee
(integer) 1
127.0.0.1:6379> hset user:1 age 17
(integer) 1
127.0.0.1:6379> hset user:1 city shenzhen
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 3

5、批量设置或获取filed-value

hmget key field [field ...]
hmset key field value [field value ...]

如:

127.0.0.1:6379> hmset user:1 name nosee age 27 city HK
OK
127.0.0.1:6379> hmget user:1 name city
1) "nosee"
2) "HK"

6、判断filed是否存在

hexists key field

例如,user:1包含name域,所以返回结果1,不包含sex域所以返回0:

127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 sex
(integer) 0

7、获取所有filed

hkeys key

如:

127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "city"

8、获取所有value

hvals key

如:

127.0.0.1:6379> hvals user:1
1) "nosee"
2) "27"
3) "HK"

9、获取所有field-value

hgetall key

如:

127.0.0.1:6379> hgetall user:1
1) "name"
2) "nosee"
3) "age"
4) "27"
5) "city"
6) "HK"

Tip:在使用 hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要全部获取field-value,可以使用 hscan命令,该命令会渐进式遍历哈希类型,hscan将在后面章节介绍。

10、hincrby hincrbyfloat

hincrby key field increment
hincrbyfloat key field increment

hincrby和hincrbyfloat,就像incrby和incrbyfloat命令一样,但是它们的作用域是field,如:

127.0.0.1:6379> hget user:1 age
"27"
127.0.0.1:6379> hincrby user:1 age 2
(integer) 29
127.0.0.1:6379> hincrbyfloat user:1 age 0.5
"29.5"

11、计算value的字符串长度(需要Redis3.2以上)

hstrlen key field

如:

127.0.0.1:6379> hget user:1 name
"nosee"
127.0.0.1:6379> hstrlen user:1 name
(integer) 5

三、哈希类型命令时间复杂度

命令时间复杂度
hset key field valueO(1)
hget key fieldO(1)
hdel key field [field …]O(k),k是field的个数
hlen keyO(1)
hgetall keyO(n),n是field的总数
hmget key field [field …]O(k),k是field的个数
hmset key field value [field value …]O(k),k是field的个数
hexists key fieldO(1)
hkeys keyO(n),n是field的总数
hvals keyO(n),n是field的总数
hsetnx key field valueO(1)
hincrby key field incrementO(1)
hincrbyfloat key field incrementO(1)
hstrlen key fieldO(1)

参考:

《Redis开发与运维》 付磊 & 张益军

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值