文章目录
- Redis概述
- Hash类型
- Hash类型常用命令
- 1 HSET:添加或者修改hash类型key的field的值
- 2 HGET :获取一个hash类型key的field的值
- 3 HMSET:批量添加多个hash类型key的field的值
- 4 HMGET:批量获取多个hash类型key的field的值
- 5 HGETALL:获取一个hash类型的key中的所有的field和value
- 6 HKEYS:获取一个hash类型的key中的所有的field
- 7 HINCRBY:让一个hash类型key的字段值自增并指定步长
- 8 HDEL:用于从哈希表中删除一个或多个字段
- 9 HEXISTS:检查哈希表中指定字段是否存在
- 10 HLEN:获取哈希表中字段的数量
 
Redis概述
Redis概述

Hash类型
-  Redis中的Hash类型可以存储类似于Java中HashMap结构的无序字典,它提供了对单个字段进行CRUD操作的能力。 
-  相比于将整个对象序列化为字符串再存储的String类型,使用Hash类型可以更方便地修改和访问对象的各个字段。 
-  在Hash结构中,每个字段都对应一个值,这使得我们可以针对单个字段进行操作,而不需要反序列化整个对象。这样可以提高效率,并且更加灵活地处理字段的增删改查。 
Hash类型常用命令
1 HSET:添加或者修改hash类型key的field的值

 HSET 命令用于将一个或多个字段-值对设置到哈希表中。如果字段已经存在于哈希表中,它的值将被更新。
HSET key field value [field value ...]
- key:要操作的哈希表键。
- field:要设置的字段。
- value:字段对应的值。
返回值
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"
redis> HSET myhash field2 "Hi" field3 "World"
(integer) 2
redis> HGET myhash field2
"Hi"
redis> HGET myhash field3
"World"
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "Hi"
5) "field3"
6) "World"
redis> 
- 当字段是哈希表中的一个新字段时,返回 1。
- 当字段已经存在于哈希表中,且值被更新时,返回 0。
键 myhash 的哈希表如下:
myhash:
    field1: a
    field2: b
使用 HSET 命令设置新字段和更新字段的值:
HSET myhash field3 c
命令会在 myhash 中设置新字段 field3,其值为 c。由于 field3 是一个新字段,所以命令返回 1。
HSET myhash field2 bb
命令会将 field2 的值更新为 bb。由于 field2 已经存在于哈希表中,所以命令返回 0。
2 HGET :获取一个hash类型key的field的值

 HGET 命令用于获取哈希表中指定字段的值。
HGET key field
- key:要操作的哈希表键。
- field:要获取值的字段。
返回值
redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)
redis> 
- 当字段存在于哈希表中时,返回字段的值。
- 当字段不存在时,返回 nil。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HGET 命令获取字段的值:
HGET myhash field2
返回 value2,因为 field2 的值是 value2。
HGET myhash field4
返回 nil,因为 field4 不存在于哈希表中。
3 HMSET:批量添加多个hash类型key的field的值

 HMSET 命令用于同时设置哈希表中多个字段的值。
HMSET key field value [field value ...]
- key:要操作的哈希表键。
- field:要设置的字段。
- value:字段对应的值。
返回值
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis> 
命令不返回任何值。
myhash:
    field1: a
    field2: b
使用 HMSET 命令同时设置多个字段的值:
HMSET myhash field3 c field4 d
命令会将 field3 的值设置为 c,并将 field4 的值设置为 d。
如果字段已经存在于哈希表中,则会被更新;如果字段不存在,则会被创建。
myhash 的哈希表如下:
myhash:
    field1: a
    field2: b
    field3: c
    field4: d
4 HMGET:批量获取多个hash类型key的field的值

 HMGET 命令用于同时获取哈希表中一个或多个字段的值。
HMGET key field [field ...]
- key:要操作的哈希表键。
- field:一个或多个要获取值的字段。
返回值
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
redis> 
返回一个数组,数组中的元素为对应字段的值。如果字段不存在,则返回 nil。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HMGET 命令获取多个字段的值:
HMGET myhash field1 field2 field4
这个命令会返回一个数组 ["value1", "value2", nil]。因为 field1 对应的值是 value1,field2 对应的值是 value2,而 field4 不存在于哈希表中,所以返回 nil。
- HMGET命令允许一次性获取多个字段的值,非常方便。
- 返回的值顺序与请求的字段顺序相同,即使某些字段的值为 nil,数组中也会对应位置返回nil。
- 如果 key不存在,则返回一个空数组。
5 HGETALL:获取一个hash类型的key中的所有的field和value

 HGETALL 命令用于获取哈希表中所有字段和对应的值。
HGETALL key
- key:要操作的哈希表键。
返回值
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
redis> 
返回一个数组,数组中的元素为字段和对应的值交替排列。如果哈希表为空,返回一个空数组。
示例
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HGETALL 命令获取哈希表中所有字段和对应的值:
HGETALL myhash
这个命令会返回一个数组 ["field1", "value1", "field2", "value2", "field3", "value3"]。
注意
- 返回的数组中,字段和对应的值是交替排列的。
- 如果哈希表为空,返回一个空数组。
6 HKEYS:获取一个hash类型的key中的所有的field

 HKEYS 命令用于获取哈希表中所有的字段(键)。
HKEYS key
- key:要操作的哈希表键。
返回值
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
redis> 
返回一个数组,数组中的元素为哈希表中所有的字段(键)。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HKEYS 命令获取哈希表中所有的字段(键):
HKEYS myhash
命令会返回一个数组 ["field1", "field2", "field3"],其中包含了哈希表中的所有字段。
Tips:
- 返回的数组中的字段顺序不确定。
- 如果哈希表为空,返回一个空数组。
7 HINCRBY:让一个hash类型key的字段值自增并指定步长

 HINCRBY 命令用于为哈希表中的字段值加上指定增量值。
如果字段不存在,HINCRBY 会先将其值设为 0,然后再执行增加操作。
HINCRBY 很适合用于需要对计数进行递增或递减操作的场景,例如统计点击量、计数器等。
HINCRBY key field increment
- key:要操作的哈希表键。
- field:要增加值的字段。
- increment:要增加的值,可以为负数。
返回值
redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
redis> 
返回字段的增量操作后的值。
键 myhash 的哈希表如下:
myhash:
    field1: 5
    field2: 10
使用 HINCRBY 命令增加字段 field1 的值:
HINCRBY myhash field1 3
这个命令会将 field1 的值增加 3,因此新的值为 8,并返回 8。
如果字段不存在:
HINCRBY myhash field3 7
命令会先将 field3 的值设为 0,然后增加 7,因此新的值为 7,并返回 7。
Tips:
- HINCRBY只适用于值为整数的字段,如果字段值不能转换为整数(例如是字符串),则会返回一个错误。
- increment可以为负数,这样可以实现减法操作。
- 如果哈希表或者字段不存在,会自动创建并进行相应的增量操作。
8 HDEL:用于从哈希表中删除一个或多个字段

 HDEL 命令用于从哈希表中删除一个或多个字段。
HDEL key field [field ...]
- key:要操作的哈希表键。
- field [field ...]:要删除的字段列表,可以同时删除多个字段。
返回值
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
redis>
返回被成功移除的字段数量,不包括那些不存在的字段。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HDEL 命令删除字段 field1:
HDEL myhash field1
这个命令会删除哈希表 myhash 中的 field1 字段,并返回 1,表示成功移除了一个字段。
如果要删除多个字段,可以在命令中同时指定多个字段:
HDEL myhash field2 field3
这个命令会删除哈希表 myhash 中的 field2 和 field3 字段,并返回 2,表示成功移除了两个字段。
如果删除的字段不存在,不会报错,而是简单地忽略。
注意
- 删除哈希表中不存在的字段将被忽略,不会报错。
- 如果指定的键不存在,HDEL命令将返回 0,表示没有字段被移除。
9 HEXISTS:检查哈希表中指定字段是否存在

 HEXISTS 命令用于检查哈希表中指定字段是否存在。
HEXISTS key field
- key:要操作的哈希表键。
- field:要检查的字段。
返回值
redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
redis> 
返回整数:
- 1:如果字段在哈希表中存在。
- 0:如果字段在哈希表中不存在,或者键不存在。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HEXISTS 命令检查字段 field1 是否存在:
HEXISTS myhash field1
这个命令会返回 1,表示字段 field1 存在。
如果检查一个不存在的字段,例如 field4:
HEXISTS myhash field4
这个命令会返回 0,表示字段 field4 不存在。
如果哈希表 myhash 本身不存在:
HEXISTS nonexistent_hash somefield
这个命令也会返回 0,表示字段不存在,因为哈希表本身就不存在。
10 HLEN:获取哈希表中字段的数量

 HLEN 命令用于获取哈希表中字段的数量。
HLEN key
- key:要操作的哈希表键。
返回值
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
redis> 
返回整数,表示哈希表中字段的数量。
myhash:
    field1: value1
    field2: value2
    field3: value3
使用 HLEN 命令获取哈希表中字段的数量:
HLEN myhash
这个命令会返回 3,表示哈希表中共有 3 个字段。
如果指定的键不存在,或者键对应的值不是哈希表类型,那么 HLEN 命令会返回 0。
HLEN nonexistent_key
这个命令会返回 0,表示指定的键不存在。
HLEN nonhash_key
这个命令也会返回 0,表示指定的键不是哈希表类型。
更多的Hash命令可以去官网https://redis.io/docs/latest/commands/?group=hash查看哦~
 



![[C++][数据结构][跳表]详细讲解](https://img-blog.csdnimg.cn/direct/041dd1f0035442a9a2020cf639326eea.png)














