本实例以Redis 4.0.1 为例,来演示使用Redis命令对散列(Hash)类型数据的操作。

HSET 存放hash数据

1. 语法格式

将字段中的哈希存储在键值上。 如果密钥不存在,则创建一个保存哈希值的新密钥。 如果字段已经存在于散列中,则会被覆盖。
1
HSET key field value

2.返回值

1: 如果字段是散列中的新字段,并且值被设置。 0: 如果字段已经存在于散列中,并且值已更新。

3.示例

1
2
3
4
5
6
127.0.0.1:6379> hset redis hello world
(integer) 1
127.0.0.1:6379> hset redis nihao shijie
(integer) 1
127.0.0.1:6379> hset redis nihao java
(integer) 0

HGET 获取hash数据

1. 语法格式

返回与key中存储的哈希字段相关联的值。
1
HGET key field

2.返回值

如果存在,则返回字段相关联的值 如果不存在,返回'nil'

3.示例

1
2
3
4
5
6
127.0.0.1:6379> hget redis hello
"world"
127.0.0.1:6379> hget redis nihao
"java"
127.0.0.1:6379> hget redis world
(nil)

HSETNX 不覆盖存放hash数据

1. 语法格式

将存储在键中的哈希值中的字段设置为值,只有当字段不存在时。 如果密钥不存在,则创建一个保存哈希值的新密钥。 如果字段已经存在,则此操作无效。
1
HSETNX key field value

2.返回值

1:如果字段是散列中的新字段,并且值被设置。 0:如果字段已经存在于散列中,并且没有执行任何操作

3.示例

1
2
3
4
127.0.0.1:6379> hsetnx redis hello shijie
(integer) 0
127.0.0.1:6379> hsetnx redis say hi
(integer) 1

HMSET 批量存放hash数据

1. 语法格式

将指定的字段设置为在密钥存储的哈希值中的各自的值。 此命令将覆盖哈希中已存在的任何指定的字段。 如果密钥不存在,则创建一个保存哈希值的新密钥。
1
HMSET key field value [field value ...]

2.返回值

OK

3.示例

1
2
127.0.0.1:6379> hmset code-language java good php nice
OK

HMGET 批量获取存放hash数据

1. 语法格式

将指定的字段设置为在密钥存储的哈希值中的各自的值。 此命令将覆盖哈希中已存在的任何指定的字段。 如果密钥不存在,则创建一个保存哈希值的新密钥。
1
HMGET key field [field ...]

2.返回值

以列表的形式返回与key中存储的哈希中指定字段相关联的值。

3.示例

1
2
3
4
5
6
127.0.0.1:6379> hmget code-language java hello
1) "good"
2) (nil)
127.0.0.1:6379> hmget code-language java php
1) "good"
2) "nice"

HEXISTS 判断数据是否存在

1. 语法格式

如果字段是存储在键中的哈希值中的现有字段,则返回。
1
HEXISTS key field

2.返回值

1:如果哈希包含字段。 0:如果哈希不包含字段,或者键不存在。

3.示例

1
2
3
4
127.0.0.1:6379> hexists code-language java
(integer) 1
127.0.0.1:6379> hexists code-language hello
(integer) 0

HLEN 获取hash的数量

1. 语法格式

返回在key中存储的哈希中包含的字段数。
1
HLEN key

2.返回值

如果key存在,返回哈希中的字段数 如果key不存在,返回0

3.示例

1
2
3
4
127.0.0.1:6379> hlen code-language
(integer) 2
127.0.0.1:6379> hlen hello
(integer) 0

HDEL 删除key的指定字段信息

1. 语法格式

从存储在密钥的哈希中删除指定的字段。 在此散列中不存在的指定字段将被忽略。 如果键不存在,则将其视为空哈希,此命令返回0。
1
HDEL key field [field ...]

2.返回值

从哈希中删除的字段数,不包括指定的但不存在的字段。

3.示例

1
2
127.0.0.1:6379> hdel code-language java hello
(integer) 1

HKEYS 根据key获取所有字段信息

1. 语法格式

返回在key中存储的哈希值中的所有字段名。
1
HKEYS key

2.返回值

哈希中的字段列表,或当不存在键时为空列表。

3.示例

1
2
3
4
127.0.0.1:6379> hkeys code-language
1) "php"
127.0.0.1:6379> hkeys hello
(empty list or set)

HVALS 根据key获取所有字段值信息

1. 语法格式

返回在key中存储的哈希值中的所有值。
1
HVALS key

2.返回值

哈希表中的值列表,或键不存在时的空列表。

3.示例

1
2
3
4
127.0.0.1:6379> hvals code-language
1) "nice"
127.0.0.1:6379> hvals hello
(empty list or set)

HGETALL 根据key获取所有字段和字段值的信息

1. 语法格式

返回存储在键中的哈希值的所有字段和值。 在返回的值中,每个字段名称后跟其值,因此回复的长度是散列大小的两倍。
1
HGETALL key

2.返回值

列表中的字段及其值存储在散列中,或空列表当键不存在时。

3.示例

1
2
3
4
5
127.0.0.1:6379> hgetall code-language
1) "php"
2) "nice"
127.0.0.1:6379> hgetall hello
(empty list or set)

HINCRBY 字段的增长(整数类型)

1. 语法格式

通过增量增加存储在键中的哈希中的字段中存储的数字。 如果密钥不存在,则创建一个保存哈希值的新密钥。 如果字段不存在,则在执行操作之前将该值设置为0。 HINCRBY支持的值的范围限制为64位有符号整数。
1
HINCRBY key field increment

2.返回值

增量操作后的字段值。

3.示例

1
2
3
4
5
6
7
8
127.0.0.1:6379> hincrby code-language php 10
(error) ERR hash value is not an integer
127.0.0.1:6379> hset code-language inc 1
(integer) 1
127.0.0.1:6379> hincrby code-language inc 10
(integer) 11
127.0.0.1:6379> hget code-language inc
"11"

HINCRBYFLOAT 字段的增长(浮点数据)

1. 语法格式

以指定的增量增加存储在键处的哈希值的指定字段,并表示浮点数。 如果增量值为负,则结果是使哈希字段值递减而不是递增。 如果该字段不存在,则在执行操作之前将其设置为0。 如果出现以下情况之一,则返回错误: 该字段包含错误类型的值(而不是字符串)。 当前字段内容或指定的增量不能作为双精度浮点数解析。
1
HINCRBYFLOAT key field increment

2.返回值

增量操作后的字段值。

3.示例

1
2
3
4
5
6
127.0.0.1:6379> hset red-float filed 1.2
(integer) 1
127.0.0.1:6379> hincrbyfloat red-float filed 3
"4.2"
127.0.0.1:6379> hincrbyfloat red-float filed 3.5
"7.7"

HSTRLEN 根据key或者字段值的长度

1. 语法格式

返回与key中存储的哈希字段相关联的值的字符串长度。 如果键或字段不存在,则返回0。
1
HSTRLEN key field

2.返回值

与字段相关联的值的字符串长度,或当字段不存在于散列或键中时为零,根本不存在。

3.示例

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> hmset red-str f1 hello f2 2.5 f3 2
OK
127.0.0.1:6379> hstrlen red-str hello
(integer) 0
127.0.0.1:6379> hstrlen red-str f1
(integer) 5
127.0.0.1:6379> hstrlen red-str f2
(integer) 3
127.0.0.1:6379> hstrlen red-str f3
(integer) 1