Hash 哈希类型

哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{fieldN,valueN}]

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

Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

常用命令

为哈希表中的字段赋值:hset

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,旧值将被覆盖。

获取哈希表中字段的值:hget

127.0.0.1:6379> hset myhash field1 hello1
(integer) 1
127.0.0.1:6379> hget myhash field1 
"hello1"
127.0.0.1:6379> hset myhash field1 hello2  
(integer) 0
127.0.0.1:6379> hget myhash field1   #hello1被覆盖
"hello2"

同时将多个 field-value (字段-值)对设置到哈希表中:mhset

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

同时获取多个哈希表中的字段的值:mhget

127.0.0.1:6379> hmset myhash field1 hello1 field2 hello2
OK
127.0.0.1:6379> hmget myhash field1 field1
1) "hello1"
2) "hello1"

获取哈希表中指定 key 的所有字段和值:hgetall

127.0.0.1:6379> hgetall myhash
1) "field1"
2) "hello1"
3) "field2"
4) "hello2"

删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略:hdel

127.0.0.1:6379> hdel myhash field1   #删除指定哈希表myhash中某个字段
(integer) 1
127.0.0.1:6379> hgetall myhash   #
1) "field2"
2) "hello2"
127.0.0.1:6379> hmset myhash field3 hello3 field4 hello4 field5 hello5
OK
127.0.0.1:6379> hgetall myhash
1) "field2"
2) "hello2"
3) "field3"
4) "hello3"
5) "field4"
6) "hello4"
7) "field5"
8) "hello5"
#=============删除指定哈希表myhash中多个字段=============
127.0.0.1:6379> hdel myhash field2 field3 field3 field4 field5
(integer) 4
127.0.0.1:6379> hgetall myhash
(empty array)

获取哈希表中字段的数量:hlen

哈希表中字段的数量。 当 key 不存在时,返回 0

127.0.0.1:6379> hmset myhash field3 hello3 field4 hello4 field5 hello5
OK
127.0.0.1:6379> hlen myhash
(integer) 3
127.0.0.1:6379> hlen youhash
(integer) 0

查看哈希表的指定字段是否存在:hexists

如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0

127.0.0.1:6379> hgetall myhash
1) "field3"
2) "hello3"
3) "field4"
4) "hello4"
5) "field5"
6) "hello5"
127.0.0.1:6379> hexists myhash field4
(integer) 1
127.0.0.1:6379> hexists myhash field6
(integer) 0

获取哈希表中的所有字段:hkeys

获取哈希表中的所有字段的属性:hvals

127.0.0.1:6379> hgetall myhash
1) "field3"
2) "hello3"
3) "field4"
4) "hello4"
5) "field5"
6) "hello5"
127.0.0.1:6379> hkeys myhash  #获取哈希表中的所有字段
1) "field3"
2) "field4"
3) "field5"
127.0.0.1:6379> hvals myhash  #获取哈希表中所有字段的属性
1) "hello3"
2) "hello4"
3) "hello5"

为哈希表中的字段值加上指定增量值:hincrby

增量也可以为负数,相当于对指定字段进行减法操作。

如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。

如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。

对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。

本操作的值被限制在 64 位(bit)有符号数字表示之内。

127.0.0.1:6379> hset myhash field1 10
(integer) 1
127.0.0.1:6379> hincrby myhash field1 5
(integer) 15
127.0.0.1:6379> hget myhash field1
"15"

为哈希表中不存在的的字段赋值:hsetnx

如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

如果字段已经存在于哈希表中,操作无效。

如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。

127.0.0.1:6379> hsetnx myhash field2 hello2
(integer) 1
127.0.0.1:6379> hsetnx myhash field2 hi2
(integer) 0

Redis哈希对象常常用来缓存一些对象信息,如用户信息、商品信息、配置信息等。

127.0.0.1:6379> hset user:1 name wanli age 3 
(integer) 2
127.0.0.1:6379> hmget user:1 name age
1) "wanli"
2) "3"
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐