Redis之hash类型解读

2023-10-15 10:52:50 浏览数 (2)

基本介绍

Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable (Map<String,Map<Object,Obje ct>>)

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>

其中,每个 field 都是一个字符串,可以认为是 Hash 中的 key,而 value 可以是字符串、数字、对象等类型。在 Redis 中,Hash 适用于存储对象或实体的属性,比如用户信息、商品信息等。举个例子,我们可以用 Hash 存储一个用户的信息:

代码语言:javascript复制
HMSET user:001 name "张三" age 20 gender "男"

这个命令将用户 “张三” 的信息存储在名为 “user_001” 的 Hash 中。

常用命令
概述

序号

命令及描述

1

HDEL key field2 [field2] 删除一个或多个哈希表字段

2

HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。

3

HGET key field 获取存储在哈希表中指定字段的值

4

HGETALL key 获取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。

6

HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

7

HKEYS key 获取所有哈希表中的字段

8

HLEN key 获取哈希表中字段的数量

9

HMGET key field1 [field2] 获取所有给定字段的值

10

HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。

11

HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。

12

HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。

13

HVALS key 获取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

HSET key field value

Redis Hset 命令用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 "foo"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
 
redis 127.0.0.1:6379> HSET website google "www.g.cn"       # 设置一个新域
(integer) 1
 
redis 127.0.0.1:6379>HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0

 返回值:如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

HMSET key field1 value1 [field2 value2 ]

Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 "foo" field2 "bar"
OK
redis 127.0.0.1:6379> HGET myhash field1
"foo"
redis 127.0.0.1:6379> HMGET myhash field2
"bar"

 返回值:如果命令执行成功,返回 OK 。

HGET key field

Redis Hget 命令用于返回哈希表中指定字段的值。

代码语言:javascript复制
# 字段存在
 
redis> HSET site redis redis.com
(integer) 1
 
redis> HGET site redis
"redis.com"
 
 
# 字段不存在
 
redis> HGET site mysql
(nil)

返回值:返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

HMGET key field1 [field2]

Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
1) "foo"
2) "bar"
3) (nil)

返回值:一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

HKEYS key

Redis Hkeys 命令用于获取哈希表中的所有字段名。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"

返回值:包含哈希表中所有字段的列表。 当 key 不存在时,返回一个空列表。

HVALS key

Redis Hkeys 命令用于获取哈希表中的所有字段名。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HKEYS myhash
1) "field1"
2) "field2"

返回值:包含哈希表中所有字段的列表。 当 key 不存在时,返回一个空列表。

HINCRBY key field increment

Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。

代码语言:javascript复制
redis 127.0.0.1:6379> HSET myhash field1 20
(integer) 1
redis 127.0.0.1:6379> HINCRBY myhash field 1
(integer) 21
redis 127.0.0.1:6379> HINCRBY myhash field -1
(integer) 20

 返回值:执行 HINCRBY 命令之后,哈希表中字段的值。

0 人点赞