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 manOK127.0.0.1:6379> hgetall map1) "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. 减少映射
  2. 删除映射
  3. 查问映射
  4. 特有命令

1. 减少命令

  1. hset:设置一个key中的属性映射
  2. hsetnx:属性映射不存在,则创立胜利
  3. hmset:批量设置属性映射

2. 删除映射

  1. hdel:删除一个或多个属性字段

3. 查问映射

  1. hget:查问一个key的属性映射
  2. hmget:查问多个key对应的属性映射
  3. hgetall:查问指定的key中所有的属性映射和值
  4. hexists:判断属性值是否存在
  5. hlen:统计汇合有多少个属性
  6. hkeys:列出所有的key的属性
  7. hvals:列出所有的属性对应的value

4. 特有命令

  1. incrby:指定属性减少整数增量
  2. incrbyfloat:指定属性减少浮点型增量

三、命令实际

1. 减少映射

127.0.0.1:6379> keys *(empty list or set)# 设置属性name127.0.0.1:6379> hset map name liudd(integer) 1127.0.0.1:6379> hgetall map1) "name"2) "liudd"# 批量设置属性127.0.0.1:6379> hmset map age 2 sex manOK127.0.0.1:6379> hgetall map1) "name"2) "liudd"3) "age"4) "2"5) "sex"6) "man"# 属性ff不存在,则创立胜利,反之存在则失败127.0.0.1:6379> hsetnx map ff vv(integer) 1127.0.0.1:6379> hgetall map1) "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) 0127.0.0.1:6379> hgetall map1) "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 map1) "name"2) "liudd"3) "age"4) "2"5) "sex"6) "man"7) "ff"8) "vv"# 删除属性ff127.0.0.1:6379> hdel map ff(integer) 1127.0.0.1:6379> hgetall map1) "name"2) "liudd"3) "age"4) "2"5) "sex"6) "man"127.0.0.1:6379> 

3. 查问映射

# 查问所有属性和值127.0.0.1:6379> hgetall map1) "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 sex1) "liudd"2) "2"3) "man"# 查问key的列表127.0.0.1:6379> hkeys map1) "name"2) "age"3) "sex"# 查问value的列表127.0.0.1:6379> hvals map1) "liudd"2) "2"3) "man"# 查问ff属性是否存在127.0.0.1:6379> hexists map ff(integer) 0127.0.0.1:6379> hexists map name(integer) 1127.0.0.1:6379>

4. 特有命令

127.0.0.1:6379> hgetall map1) "name"2) "liudd"3) "age"4) "2"5) "sex"6) "man"# age属性减少整数7127.0.0.1:6379> hincrby map age 7(integer) 9127.0.0.1:6379> hgetall map1) "name"2) "liudd"3) "age"4) "9"5) "sex"6) "man"# age属性减少浮点型1.5127.0.0.1:6379> hincrbyfloat map age 1.5"10.5"127.0.0.1:6379> hgetall map1) "name"2) "liudd"3) "age"4) "10.5"5) "sex"6) "man"127.0.0.1:6379>

附录

下表列出了 redis hash 根本的相干命令:

序号命令及形容
1[HDEL key field1 field2] 删除一个或多个哈希表字段
2HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
3HGET key field 获取存储在哈希表中指定字段的值。
4HGETALL key 获取在哈希表中指定 key 的所有字段和值
5HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
6HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7HKEYS key 获取所有哈希表中的字段
8HLEN key 获取哈希表中字段的数量
9[HMGET key field1 field2] 获取所有给定字段的值
10[HMSET key field1 value1 field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
11HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
12HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
13HVALS key 获取哈希表中所有值。
14HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

更多命令请参考:https://redis.io/commands