hash类型
Redis
中的 hash
类型是一个键对应多个键值对的数据类型(hash类型是 一个键(key) 对应多个 字段和值(field 和 value) 的一个数据类型, 即: 嵌套键值对
), 类似于 java
中的 hashmap
和 Go语言
中的 map
类型, 适用于存储对象的场景
, 如用户信息、商品信息等。
值得注意的是
hash
的字段不能嵌套其他数据结构,值只能是字符串。
形式如下:
key: { field1: value1, field2: value2, ... }
常用命令
1. HSET
设置字段值, 若该 key
已存在, 则将该 key
覆盖, 若不存在, 则创建。
语法:
HSET key field value [field value ...]
2. HSETNX
仅在指定字段不存在时设置其值,可以确保操作的原子性和安全性。
语法:
HSETNX key field value
3. HGET
获取指定的 key
的指定字段值, 若指定的 key
类型不是 hash
或 不存在则报错
语法:
HGET key field
4. HGETALL
获取指定的 key
的所有字段值, 若指定的 key
类型不是 hash
或 不存在则报错
当使用 HGETALL
命令时,返回的列表结构是每个字段名后面紧跟对应的值,因此整个列表的元素数量是哈希表中字段数量的两倍。
语法:
HGETALL key
5.HDEL
删除指定的 hash
中的指定字段, 若删除完成后没有字段, 则删除指定的 hash
并返回 0
语法:
HDEL key field [field ...]
6.HLEN
获取存储在的 hash
中包含的字段数。
语法:
HLEN key
7. HEXISTS
检查指定的 hash
字段是否存在, 若存在则返回 true
, 否则返回 false
语法:
HEXISTS key field
8.HKEYS
获取指定 hash
的所有字段名
语法:
HKEYS key
9.HVALS
获取指定 hash
中的所有字段对应的值
语法:
HVALS key
10.HINCRBY
对指定 hash
中指定字段所对应的整数值
进行增减。
特别的:
1. 因为 `HINCRBY` 命令对数值的增减是原子性的, 所以适合高并发场景, 保证并发场景下数据的一致性, 且范围在 64位有符号数内。
2. `HINCRBY` 会自动初始化
* 若 `key` 不存在, 则自动创建空 `hash` 并执行操作
* 若 `field` 不存在, 则自动初始化字段为 **0** 后再增减
注: 若字段所对应的值不是整数, 则报错
语法:
HINCRBY key field increment
11.HINCRBYFLOAT
对指定 hash
中指定字段所对应的浮点数值
进行增减。
特别的:
1. 因为 `HINCRBYFLOAT` 命令对数值的增减是原子性的, 所以适合高并发场景, 保证并发场景下数据的一致性, 且范围在 64位有符号数内。
2. `HINCRBYFLOAT` 会自动初始化
* 若 `key` 不存在, 则自动创建空 `hash` 并执行操作
* 若 `field` 不存在, 则自动初始化字段为 **0.0** 后再增减
3. 高精度
* 支持17位小数的精度, 整数部分最多表示17位
* 若结果为恰巧为整数, 则结果存储时会移除末尾的零, 但计算过程保留完整精度
语法:
HINCRBYFLOAT key field increment