Redis(七)—— Hash 哈希类型详解
Hash 哈希类型哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{fieldN,valueN}],Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。常用命令为哈希表中的
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"
更多推荐
所有评论(0)