Redis 的命令详解 - Hash 篇
Hash 命令详解
跟 Hash 相关的命令一共有 15 种,这里只介绍常用的。想查看全部命令请参考官网
说明 : 由于 reids 的 Hash 类型的格式如下,为了方便区分,里层的 key 我称呼为字段。
key :{key1 : value1,key2 : value2...}
HSET : 添加 hash 类型的键值对
起始版本 : 2.0.0 时间复杂度 : 添加一个字段-值对为O(1),添加多个字段:值对为O(N),N为字段:值对的数量。
- 如果key不存在,则创建一个 hash。
- 如果key存在,则往 hash 中追加。
- 如果字段已经存在,则将其覆盖。
从Redis 4.0.0开始,HSET 允许添加多个字段:值对。
语法
HSET key field1 value1 [field2 value2 ...]
返回值
添加的字段:值对的对数
HSETNX : 安全添加 hash 类型的键值对
起始版本 : 2.0.0
时间复杂度 : O(1)
只有字段不存在时,才添加字段:值对。key不存在时,先创建一个 hash。
语法
HSETNX key field value
返回值
- 0 : 字段已存在
- 1 : 添加成功
HGET : 获取某个字段的值
起始版本 : 2.0.0
时间复杂度 : O(1)
语法
HGET key field
返回值
- 字段对应的值
- nil :字段不存在时
HMGET : 获取多个字段的值
起始版本 : 2.0.0
时间复杂度 : O(N),其中N是字段的数目
语法
HMGET key field1 [field2 ...]
返回值
value 列表,不存在的 field 返回 nil,顺序与field顺序相同
HGETALL : 获取所有的字段:值对
起始版本 : 2.0.0
时间复杂度 : O(N),其中N是hash的大小。
语法
HGETALL key
返回值
返回所有的字段:值对列表,key如果不存在,返回空列表
HKEYS : 获取所有的字段
起始版本 : 2.0.0
时间复杂度 : O(N),其中N是hash的大小。
语法
HKEYS key
返回值
返回所有的字段,key如果不存在则返回空列表
HVALS : 获取所有的字段的值
起始版本 : 2.0.0
时间复杂度 : O(N),其中N是hash的大小。
语法
HVALS key
返回值
返回所有的字段的值,key如果不存在则返回空列表
HDEL : 删除某个字段
起始版本 : 2.0.0
时间复杂度 : O(N),其中N是要删除的字段数。
语法
HDEL key field1 [field2]
返回值
从 hash 中删除的字段个数,不包括指定的但不存在的字段。
历史
Redis 版本 >= 2.4:接受多个field参数。低于2.4的Redis版本每次调用只能删除一个字段。
要在早期版本中以原子方式从哈希中删除多个字段,请使用MULTI
、 EXEC
HEXISTS : 判断字段是否存在
起始版本 : 2.0.0
时间复杂度 : O(1)
语法
HEXISTS key field
返回值
- 1 : 如果 hash 中包含field。
- 0 : 如果 hash 中不包含field,或key不存在。
HLEN : 获取 hash 中字段:值对的数量
起始版本 : 2.0.0
时间复杂度 : O(1)
语法
HLEN key
返回值
字段:值对的数量,当 key 不存在,返回0
HSTRLEN : 获取字段对应值的长度
起始版本 : 3.2.0
时间复杂度 : O(1)
语法
HSTRLEN key field
返回值
字段对应值的长度,如果 field 或 key 不存在,返回0
HINCRBY : 给字段的值加上一个整数
起始版本 : 2.0.0
时间复杂度 : O(1)
- 字段的值必须是整数或可以转换成整数
- 如果字段不存在,则创建,并将值设置0
- 如果 key 不存在,则创建,并创建字段和默认值
语法
HINCRBY key field 整数
HINCRBY
支持的整数的范围,限制为64位带符号整数。由于带符号,所以可以变相实现减法操作
返回值
- 运算后的值
- 如果字段的值不是整数或不能转换成整数,返回错误
HINCRBYFLOAT : 给字段的值加上一个数(可以是浮点数)
起始版本 : 2.6.0
时间复杂度 : O(1)
- 字段的值必须是数或可以转换成数
- 如果字段不存在,则创建,并将值设置0
- 如果 key 不存在,则创建,并创建字段和默认值
语法
HINCRBYFLOAT key field 数(可以是浮点数)
由于数可以带符号,所以可以变相实现减法操作
返回值
- 运算后的值
- 如果字段的值不是数或不能转换成数,返回错误