redis 系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…公众号:雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!
一、基本概念
Redis hash 是一个 string 类型的 field(字段)和 value(值)的映射表,hash 特地适宜用于存储对象。
Redis 中每个 hash 能够存储 232 – 1 键值对(40 多亿)。
hash 类型能够了解为 map 汇合,{key1:value1,key2:value2}
实例
127.0.0.1:6379> hmset map name liudd age 2 sex man
OK
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
127.0.0.1:6379>
Hash 的利用场景:
将一个用户作为一个 hash,而后其属性和值就作为外部的 k-v 汇合进行存储
例如
hmset user:1 name 张 age 18 job stu
user:1 代表第 1 个用户,而后这个用户具备 name,age,job 这些字段,因为 redis 效率很高,因而适宜将属性值常常变动的对象作为 hash 存储
二、命令分类
集体了解和便于学习,进行了简略分类!
分为以下几类:
- 减少映射
- 删除映射
- 查问映射
- 特有命令
1. 减少命令
- hset:设置一个 key 中的属性映射
- hsetnx:属性映射不存在,则创立胜利
- hmset:批量设置属性映射
2. 删除映射
- hdel:删除一个或多个属性字段
3. 查问映射
- hget:查问一个 key 的属性映射
- hmget:查问多个 key 对应的属性映射
- hgetall:查问指定的 key 中所有的属性映射和值
- hexists:判断属性值是否存在
- hlen:统计汇合有多少个属性
- hkeys:列出所有的 key 的属性
- hvals:列出所有的属性对应的 value
4. 特有命令
- incrby:指定属性减少整数增量
- incrbyfloat:指定属性减少浮点型增量
三、命令实际
1. 减少映射
127.0.0.1:6379> keys *
(empty list or set)
# 设置属性 name
127.0.0.1:6379> hset map name liudd
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
# 批量设置属性
127.0.0.1:6379> hmset map age 2 sex man
OK
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# 属性 ff 不存在,则创立胜利,反之存在则失败
127.0.0.1:6379> hsetnx map ff vv
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
127.0.0.1:6379> hsetnx map ff xx
(integer) 0
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
127.0.0.1:6379>
2. 删除映射
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
7) "ff"
8) "vv"
# 删除属性 ff
127.0.0.1:6379> hdel map ff
(integer) 1
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
127.0.0.1:6379>
3. 查问映射
# 查问所有属性和值
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# 查问 map 汇合 key-value 有多少对
127.0.0.1:6379> hlen map
(integer) 3
# 查问属性 name 值
127.0.0.1:6379> hget map name
"liudd"
# 批量查问属性值
127.0.0.1:6379> hmget map name age sex
1) "liudd"
2) "2"
3) "man"
# 查问 key 的列表
127.0.0.1:6379> hkeys map
1) "name"
2) "age"
3) "sex"
# 查问 value 的列表
127.0.0.1:6379> hvals map
1) "liudd"
2) "2"
3) "man"
# 查问 ff 属性是否存在
127.0.0.1:6379> hexists map ff
(integer) 0
127.0.0.1:6379> hexists map name
(integer) 1
127.0.0.1:6379>
4. 特有命令
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "2"
5) "sex"
6) "man"
# age 属性减少整数 7
127.0.0.1:6379> hincrby map age 7
(integer) 9
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "9"
5) "sex"
6) "man"
# age 属性减少浮点型 1.5
127.0.0.1:6379> hincrbyfloat map age 1.5
"10.5"
127.0.0.1:6379> hgetall map
1) "name"
2) "liudd"
3) "age"
4) "10.5"
5) "sex"
6) "man"
127.0.0.1:6379>
附录
下表列出了 redis hash 根本的相干命令:
序号 | 命令及形容 |
---|---|
1 | [HDEL key field1 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] 迭代哈希表中的键值对。 |
更多命令请参考:https://redis.io/commands