hash常用命令汇总
命令 | 语法 | 语义 |
---|---|---|
hset | hset key field value | 设置哈希集key中指定字段field的值为value |
hmset | hmset key field value [field value …] | 设置哈希集key中若干指定字段field的值为value |
hsetnx | hsetnx key field value | 在哈希集key中不存在字段field时,添加字段field并将其值设为value |
hdel | hdel key field [field …] | 从哈希集key中移除指定的若干字段field |
hincrby | hincrby key field increment | 使哈希集key中字段field的值增加increment |
hincrbyfloat | hincrbyfloat key field increment | 使哈希集key中字段field的float值增加increment |
hget | hget key field | 返回哈希集key中字段field的值 |
hgetall | hgetall key | 返回哈希集key中所有字段和值 |
hmget | hmget key field [field …] | 返回哈希集key中若干指定字段field的值 |
hkeys | hkeys key | 返回哈希集key中所有字段的名字 |
hvals | hvals key | 返回哈希集key中所有字段的值 |
hlen | hlen key | 返回哈希集key中包含字段的数量 |
hstrlen | hstrlen key field | 返回哈希集key中字段field的值长度 |
hexists | hexists 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