文章目录
- 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: afield2: 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: value1field2: value2field3: 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: afield2: b
使用 HMSET
命令同时设置多个字段的值:
HMSET myhash field3 c field4 d
命令会将 field3
的值设置为 c
,并将 field4
的值设置为 d
。
如果字段已经存在于哈希表中,则会被更新;如果字段不存在,则会被创建。
myhash
的哈希表如下:
myhash:field1: afield2: bfield3: cfield4: 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: value1field2: value2field3: 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: value1field2: value2field3: 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: value1field2: value2field3: 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: 5field2: 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: value1field2: value2field3: 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: value1field2: value2field3: 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: value1field2: value2field3: 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查看哦~