前面我们讲述了String的相关操作命令。本篇文章主要讲解Redis中数据结构Hash的相关操作命令。希望会对你有所帮助。
目录
一、Hash哈希
二、命令
HSET
HGET
HEXISTS
HDEL
HKEYS
HVALS
HGETALL
HMGET
HLEN
HSETNX
HINCRBY 和 HINCRBYFLOAT
三、小结
🙋♂️ 作者:@Ggggggtm 🙋♂️
👀 专栏:Redis 👀
💥 标题:Redis常用命令——Hash篇 💥
❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️
一、Hash哈希
Redis中存储的都是键值对,这些键值对本身就是用哈希的方式来组织的。我们要讲解的哈希是指的键值对中的 value。也就是 key 所对应的 value 的类型是Hash。value的Hash类型可以看作是一个键值对的容器,其中的键又被称为field(用于区分 Redis 整体的键值对(key-value)),值被称为value。例如key = "key",value={ {field1, value1 } ,..., {fieldN, valueN } },Redis键值对和哈希类型二者的关系可以用下图来表示。
二、命令
HSET
HSET是用于设置哈希数据结构中指定字段(field)的值(value)。其基本语法为:
HSET key field value [field value ...]
使用HSET命令可以完成以下操作:
- 如果字段field不存在,则创建一个新的字段,并将值设为value。
- field所对应的value使用是String来存储的。
- 如果字段field已经存在,则用新值覆盖旧值。
设置成功后,返回设置filed成功的个数。具体实例如下:
HGET
HGET命令用于获取存储在哈希数据结构中指定字段的值。其基本语法为:
HGET key field
其中,key是哈希表的键名,field是要获取值的字段名。
使用HGET命令可以实现以下操作:
- 获取指定字段的值。
- 如果指定字段不存在,返回nil。
具体实例如下:
HEXISTS
HEXISTS命令用于检查哈希数据结构中是否存在指定字段。其基本语法为:
HEXISTS key field
其中,key是哈希表的键名,field是要检查是否存在的字段名。
使用HEXISTS命令可以实现以下操作:
- 检查指定字段是否存在于哈希表中。
- 如果字段存在,则返回1;如果字段不存在,则返回0。
具体实例如下:
HDEL
HDEL命令用于从哈希数据结构中删除一个或多个字段。其基本语法为:
HDEL key field1 [field2 ...]
其中,key是哈希表的键名,field1、field2等是要删除的字段名。
使用HDEL命令可以实现以下操作:
- 删除指定哈希表中的一个或多个字段。
- 返回成功删除的字段数量,不包括那些不存在的字段。
具体实例如下:
注意:我们之前学的del命令,是用来删除指定的key,而hdel是用来删除哈希类型中的field的。
HKEYS
hkeys命令用于获取指定哈希表中所有字段(field)的名称。其基本语法为:
HKEYS key
其中 key 就是哈希表的键名。具体示例如下:
注意:这个操作是先根据 key 找到对应的hash,时间复杂度O(1)。然后遍历hash打印出所有的 field,时间复杂度为O(n),这里的n是指的hash中的键值对个数。如果hash中的元素较多时,那么就会使该指令的执行时间过长,导致其他指令得不到快速的执行,进而引起一连串的不良效应。所以该操作是有风险的!
HVALS
hvals命令用于获取指定哈希表中所有字段的值,与hkeys是相对应的。其基本语法为:
HVALS key
其中 key 就是哈希表的键名。我们来看一下实例:
注意:该命令与hkeys命令原理相同,都是有一定的操作风险的!
HGETALL
hgetall命令用于获取指定哈希表中所有字段和值。可以理解为是hkeys和hvals两者相结合。其基本语法为:
HGETALL key
具体实例如下:
其返回值是每两个为一个键值对,按顺序依次列出。同样,该操作命令的风险是比较大的,谨慎使用!
HMGET
HMGET是用于同时获取哈希表中多个字段的值。它接受一个键名和一个或多个字段(field)作为参数,并返回与这些字段名对应的值。其基本语法为:
HMGET key field [field ...]
我们看具体实例:
前面我们学习了hset就可以一次设置多个field 和 value,但是hget只能一次获取一个field所对应的值。那么有hmset吗?答案是有的。但是我们实际上并不需要该命令。
HLEN
HLEN是用于获取哈希表中字段数量的命令。其基本语法为:
HLEN key
返回值就是key中所对应的field的个数。如果key不存在,那么返回0。具体实例如下:
该指令的时间复杂度为O(1),是不需要遍历了。再插入或者删除指定的field时,会做出相应的统计。
HSETNX
HSETNX是用于在哈希表中设置字段值的命令,只有在字段不存在时才会设置成功。如果字段已经存在,那么HSETNX命令将不会执行任何操作。语法:
HSETNX key field value
参数说明:
- key:哈希表的键名。
- field:要设置数值的字段名。
- value:要设置的字段值。
具体实例如下:
HINCRBY 和 HINCRBYFLOAT
HINCRBY和HINCRBYFLOAT都是Redis中用于对哈希表中的字段值进行递增操作的命令,区别在于前者适用于整数值字段,后者适用于浮点数值字段。
HINCRBY用于将哈希表中指定字段的整数值按指定增量增加。如果字段不存在,将会被创建并设置为增量值。该命令的语法如下:
HINCRBY key field increment
- key:哈希表的键名。
- field:要递增数值的字段名。
- increment:要递增的整数值。
具体实例如下:
HINCRBYFLOAT用于将哈希表中指定字段的浮点数值按指定增量增加。如果字段不存在,将会被创建并设置为增量值。该命令的语法如下:
HINCRBYFLOAT key field increment
- key:哈希表的键名。
- field:要递增数值的字段名。
- increment:要递增的浮点数值
具体实例如下:
三、小结
下图为哈希类型表命令的效果、时间复杂度,开发人员可以参考此表,结合自身业务需求和数据大小选择合适的命令。