Redis 哈希hash常用命令总结

Redis中文官网命令大全

hash常用命令汇总

命令语法语义
hsethset key field value设置哈希集key中指定字段field的值为value
hmsethmset key field value [field value …]设置哈希集key中若干指定字段field的值为value
hsetnxhsetnx key field value在哈希集key中不存在字段field时,添加字段field并将其值设为value
hdelhdel key field [field …]从哈希集key中移除指定的若干字段field
hincrbyhincrby key field increment使哈希集key中字段field的值增加increment
hincrbyfloathincrbyfloat key field increment使哈希集key中字段field的float值增加increment
hgethget key field返回哈希集key中字段field的值
hgetallhgetall key返回哈希集key中所有字段和值
hmgethmget key field [field …]返回哈希集key中若干指定字段field的值
hkeyshkeys key返回哈希集key中所有字段的名字
hvalshvals key返回哈希集key中所有字段的值
hlenhlen key返回哈希集key中包含字段的数量
hstrlenhstrlen key field返回哈希集key中字段field的值长度
hexistshexists key field返回哈希集key中字段field是否存在

命令演示

增加命令

hset

使用hset命令设置哈希集key中指定字段field的值为value。

如果哈希集key不存在,会创建一个新的哈希集并与key关联。

如果字段field在哈希集key中存在,它将被重写。

返回值有两种可能:

  • 返回值为0时,表示参数field是一个新的字段。
  • 返回值为1时,表示参数field原来已经再哈希集中存在。

示例如下:

127.0.0.1:6379> hset h1 f1 v1
(integer) 1
127.0.0.1:6379> hset h1 f1 v2
(integer) 0
127.0.0.1:6379> hget h1 f1
"v2"

hmset

使用hmset命令设置哈希集key中若干指定字段field的值为value,本质是hset的复数操作版本。

如果哈希集key不存在,会创建一个新的哈希集并与key关联。

如果任一field此前已经存在与哈希集key中,则重写该字段

示例如下:

127.0.0.1:6379> hmset h1 f1 v1 f2 v2
OK
127.0.0.1:6379> hmset h1 f1 vnew f3 v3
OK
127.0.0.1:6379> hgetall h1
1) "f1"
2) "vnew"
3) "f2"
4) "v2"
5) "f3"
6) "v3"

hsetnx

使用hsetnx命令像哈希集key中添加新的字段field,只有哈希集key中不存在field字段时生效,否则命令无效果。

如果哈希集key不存在,则会创建一个新的哈希集与key关联。

返回值有两种可能:

  • 返回值为0时,表示哈希集key中已经存在字段field,操作没有执行。
  • 返回值为1时,表示哈希集key中已经成功添加新的字段field,并被成功赋值。
    示例如下:
127.0.0.1:6379> hsetnx h1 f1 v1
(integer) 1
127.0.0.1:6379> hsetnx h1 f1 v2
(integer) 0
127.0.0.1:6379> hget h1 f1
"v1"

删除命令

hdel

使用hdel命令从哈希集key中移除指定的若干字段field。哈希集key中不存在任一参数field则忽略该字段。

如果哈希集key不存在,则将其认定为一个空集。

返回值表示从哈希集key中成功移除的字段数量。

示例如下:

127.0.0.1:6379> hmset h1 f1 v1 f2 v2
OK
127.0.0.1:6379> hdel h1 f1 f3
(integer) 1
127.0.0.1:6379> hgetall h1
1) "f2"
2) "v2"

修改命令

hincrby

使用hincrby命令使哈希集key中字段field的值增加increment。

如果哈希集key不存在,会创建一个哈希集并与key管理。

如果指定字段field不存在,则会创建字段field,并在执行增加操作前将其值设为0。

如果字段field对应的值不能作为整数自增,则返回错误。hincrby支持的值范围限定在64位有符号整数。

返回值表示增值操作执行后的字段field的值。

示例如下:

127.0.0.1:6379> hmset h1 f1 1 f2 string
OK
127.0.0.1:6379> hincrby h1 f1 5
(integer) 6
127.0.0.1:6379> hincrby h1 f2 5
(error) ERR hash value is not an integer
127.0.0.1:6379> hincrby h1 f3 5
(integer) 5

hincrbyfloat

使用hincrbyfloat命令使哈希集key中字段field的float值增加increment。规则与hincrby基本相同,只是目标值变成了浮点数。

出现下列两种情况时返回错误:

  • 字段field的值的类型不是字符串类型。
  • 字段field的值或increment不能解析为一个浮点类型。

返回值表示增值操作执行后的字段field的值。

示例如下:

127.0.0.1:6379> hincrbyfloat h1 f1 1.5
"1.5"
127.0.0.1:6379> hincrbyfloat h1 f1 a
(error) ERR value is not a valid float
127.0.0.1:6379> hset h1 f2 a
(integer) 1
127.0.0.1:6379> hincrbyfloat h1 f2 1.5
(error) ERR hash value is not a float

查询命令

hget

使用hget命令返回哈希集key中字段field的值。

当哈希集key或字段field不存在时返回nil。

示例如下:

127.0.0.1:6379> hset h1 f1 v1
(integer) 1
127.0.0.1:6379> hget h1 f1
"v1"
127.0.0.1:6379> hget h2 f1
(nil)
127.0.0.1:6379> hget h1 f2
(nil)

hgetall

使用hgetall命令返回哈希集key中所有字段和值。哈希集key不存在时返回空列表。

返回值中,每个字段明的下一个是该字段关联的值,返回值长度正好是哈希集长度的两倍。

示例如下:

127.0.0.1:6379> hmset h1 f1 vl f2 v2 f3 v3
OK
127.0.0.1:6379> hgetall h1
1) "f1"
2) "vl"
3) "f2"
4) "v2"
5) "f3"
6) "v3"
127.0.0.1:6379> hgetall h2
(empty list or set)

hmget

使用hmget命令返回哈希集key中若干指定字段field的值。

如果任一指定字段field不存在,则返回nil。

如果哈希集key不存在,则返回只含有nil的列表。

示例如下:

127.0.0.1:6379> hmset h1 f1 vl f2 v2 f3 v3
OK
127.0.0.1:6379> hmget h1 f1 f3 f5
1) "vl"
2) "v3"
3) (nil)
127.0.0.1:6379> hmget f2 f1 f2
1) (nil)
2) (nil)

hkeys

使用hkeys命令返回哈希集key中所有字段的名字。

如果哈希集不存在,则返回空列表

示例如下:

127.0.0.1:6379> hmset h1 f1 vl f2 v2 f3 v3
OK
127.0.0.1:6379> hkeys h1
1) "f1"
2) "f2"
3) "f3"
127.0.0.1:6379> hkeys h2
(empty list or set)

hvals

使用hvals命令返回哈希集key中所有字段的值。

如果哈希集key不存在,则返回空列表

示例如下:

127.0.0.1:6379> hmset h1 f1 vl f2 v2 f3 v3
OK
127.0.0.1:6379> hvals h1
1) "vl"
2) "v2"
3) "v3"
127.0.0.1:6379> hvals h2
(empty list or set)

hlen

使用hlen命令返回哈希集key中包含字段的数量。

如果哈希集key不存在时,则返回0

示例如下:

127.0.0.1:6379> hmset h1 f1 vl f2 v2 f3 v3
OK
127.0.0.1:6379> hlen h1
(integer) 3
127.0.0.1:6379> hlen h2
(integer) 0

hstrlen

使用hstrlen命令返回哈希集key中字段field的值长度。

如果哈希集key或者字段field不存在,则返回0

示例如下:

127.0.0.1:6379> hset h1 f1 v1
(integer) 1
127.0.0.1:6379> hstrlen h1 f1
(integer) 2
127.0.0.1:6379> hstrlen h2 f1
(integer) 0
127.0.0.1:6379> hstrlen h1 f2
(integer) 0

hexists

使用hexists命令返回哈希集key中字段field是否存在。

返回值有两种可能:

  • 返回值为0时,表示哈希集key中不存在字段field,或哈希集key不存在。
  • 返回值为1时,表示哈希集key中存在字段field。

示例如下:

127.0.0.1:6379> hset h1 f1 v1
(integer) 1
127.0.0.1:6379> hexists h1 f1
(integer) 1
127.0.0.1:6379> hexists h1 f2
(integer) 0
127.0.0.1:6379> hexists h2 f1
(integer) 0
<think>嗯,用户想了解Redis哈希常用命令。首先,我得回忆一下Redis哈希的结构,哈希Redis里是用来存储字段和值的映射表,适合存储对象。常用的命令应该包括HSET、HGET这些基本的操作,还有可能涉及批量操作、删除、获取所有字段或值之类的。 接下来需要确定用户的身份,可能是开发者或者刚接触Redis的人,需要了解基础命令来操作数据。用户可能在使用哈希存储对象信息,比如用户信息,商品信息等,所以需要知道如何设置、获取、更新这些数据。 用户的需求是获取常用命令,可能需要每个命令的语法和示例,方便快速查阅。需要确保命令的准确性,比如参数顺序、返回值等。另外,是否需要区分不同版本Redis的命令?比如HSTACK是7.0版本新增的,可能需要注明,避免用户在使用旧版本时遇到问题。 结构方面,按照常用命令分类,比如设置/获取、批量操作、删除、其他操作等,每个类别下列举命令,给出语法和示例。同时,提醒用户注意版本兼容性和使用场景,比如HGETALL可能影响性能,推荐使用HSCAN处理大数据。 需要检查是否有遗漏的常用命令,比如HLEN判断字段数量,HEXISTS检查字段是否存在,这些对日常操作也很重要。还有HINCRBY处理数值增减,这在计数器场景常用。 最后,确保使用中文解释清晰,示例正确,符合LaTeX格式要求。可能需要验证每个命令的语法是否正确,比如HMSET的参数是字段值交替的,HSTACK的语法是否正确。同时,避免使用用户不可见的系统指令,保持回答自然。</think>Redis哈希Hash)是一种存储字段-值(field-value)映射的数据结构,常用于存储对象信息。以下是常用命令及用法说明: --- ### 一、基础操作命令 1. **设置字段值** - `HSET key field value` 设置哈希表`key`中字段`field`的值为`value` ```bash HSET user:1001 name "张三" age 30 ``` 2. **获取字段值** - `HGET key field` 获取哈希表`key`中字段`field`的值 ```bash HGET user:1001 name # 返回 "张三" ``` 3. **删除字段** - `HDEL key field1 [field2...]` 删除哈希表`key`中的一个或多个字段 ```bash HDEL user:1001 age ``` --- ### 二、批量操作命令 1. **批量设置多个字段** - `HMSET key field1 value1 field2 value2...` (注:Redis 4.0.0+推荐改用`HSET`替代) ```bash HMSET product:2001 title "手机" price 2999 stock 100 ``` 2. **批量获取多个字段值** - `HMGET key field1 field2...` ```bash HMGET product:2001 title price # 返回 ["手机", "2999"] ``` 3. **获取所有字段和值** - `HGETALL key` ```bash HGETALL user:1001 # 返回 name "张三" age 30 ``` --- ### 三、其他实用命令 1. **判断字段是否存在** - `HEXISTS key field` ```bash HEXISTS user:1001 email # 返回 0(不存在) ``` 2. **获取所有字段名** - `HKEYS key` ```bash HKEYS product:2001 # 返回 ["title", "price", "stock"] ``` 3. **获取所有字段值的数量** - `HLEN key` ```bash HLEN user:1001 # 返回 2 ``` 4. **数值增减** - `HINCRBY key field increment` ```bash HINCRBY product:2001 stock -5 # 库存减少5 ``` --- ### 四、新版本扩展命令(Redis 7.0+) 1. **合并多个哈希表** - `HSTACK target key1 key2...` 将多个哈希表合并到`target`中(相同字段覆盖) --- ### 五、使用建议 1. **适用场景** - 存储对象属性(用户信息、商品详情等) - 替代多个`String`键的场景,减少内存碎片 2. **注意事项** - `HGETALL`在字段较多时可能阻塞服务,推荐用`HSCAN`分批获取 - 优先使用`HSET`替代弃用的`HMSET` --- 通过上述命令,您可以高效操作Redis哈希结构。建议结合业务场景选择合适命令,并关注不同Redis版本的特性差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7rulyL1ar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值