目录
[1. Hash介绍](#1. Hash介绍)
[2. hset](#2. hset)
[3. hget](#3. hget)
[3. hdel](#3. hdel)
[5. hkeys](#5. hkeys)
[6. hvals](#6. hvals)
[7. hgetall](#7. hgetall)
[8. hexists](#8. hexists)
[9. hmget](#9. hmget)
[10. hlen](#10. hlen)
[11. hsetnx](#11. hsetnx)
[12. hincrby](#12. hincrby)
[13. hincrbyfloat](#13. hincrbyfloat)
1. Hash介绍
Redis 哈希类型是键值对的集合,字段与值均支持字符串、数字等类型,适合建模用户信息、配置项等对象类数据。其支持单字段 / 多字段的增删改查、字段存在性判断、值自增自减等原子操作,且底层通过压缩列表或哈希表优化存储,空间利用率高、查询效率快,是 Redis 中存储结构化数据的核心类型之一。
在Redis中因为本身就是按照哈希的KV结构来进行存储的,所以当我们想要使用Redis里面的哈希的时候,实际上是哈希的哈希,在后者中,则用field来代替原本的Key位置,防止和前面的哈希名字相同,接下来我会介绍哈希在Redis中的使用。
2. hset
这个指令的话就是用来在Redis中创建一个哈希的键值对。
语法:
sql
hset key field value
我们看下面这张图片,在Redis中的key和field的关系就像这样。一个key可以有很多个field,一个field和一个value一一对应。

我们来看下面这张图片,当我们对一个field重新使用hset时,会对它里面的value进行更新。
同时一个key也可以对应多个field。

3. hget
这个的话就是通过key和field来得到对应的value的。
语法:
sql
hset key field value
我们看下面这张图片,hget相当于是通过两个关键字找到的v3。
它是不支持一次访问多个value的。在后面会有一些特定的指令来获取多个value的。

3. hdel
这个指令的话就是用来删除value和field的。
语法:
sql
hdel key field
我们看下面这张图片,**这个hdel删除的是field和它对应的value,不会把key给删除了的(在key还有其他对应field的时候)。**所以在这张图里面我们去访问对应的f2还是可以成功的。

5. hkeys
这个的话就是用来查找这个key里面所有的field的,它的返回值也是返回这个key对应的全部field。
语法:
sql
hkeys key
我们看下面这张图片,通过hkeys就可以查找这个k1里面使用的field了。

在下图中之所以会失败,是因为hkeys *返回空数组是因为 Redis 里*不是通配符用法,hkeys只能跟具体的键名,不能直接用通配符匹配多个哈希键。

6. hvals
这个指令的话和上面那个指令很像,只不过上面那个是返回对应的field,这个指令是返回这个key里面使用的value。
语法:
sql
hvals key
我们看下面这张图片,通过hvals就可以拿到k1里面所有的value了。
7. hgetall
这个的话就像是上面两个指令的结合体,它可以直接获得这个key所对应的所有field和value。
语法:
sql
hgetall key
我们看下面这张图片,通过这样的方式就可以吧直接得到这个k1里面使用的field和value了。

PS:无论是hvals,hkeys或者hgetall,他们其实在很多时候是不被推荐使用的,因为我们并不知道这个key里面到底有多少个哈希键值对,由于Redis是单线程的数据库,如果很多的话会让Redis卡住的。
8. hexists
这个指令的话就是用来判断某一个value是否存在或者说是判断通过两个关键字是否可以找到值。
语法:
sql
hexists key field
我们看下面的图片,如果这个value存在的话就返回1,不存在就返回0。

9. hmget
这个指令的话可以一次获取多个value的值。
语法:
sql
hmget key field........
我们看下面这张图片,我们可以输入对应的key和field,然后就可以批量的得到对应的value。

10. hlen
这个的话就是返回这个key所对应的field的个数,如果这个key不存在的话那么就返回0.
语法:
sql
hlen key
我们看下面这张图片,这个k1里面有三个哈希键值对,所以我们调用hlen的时候会返回3,而k2不存在,所以在这里会返回0。

11. hsetnx
这个指令的话就是在字段不存在的情况下,设置 hash 中的字段和值。
语法:
sql
hsetnx key field value
我们看下面这张图片 ,在k1里面没有f3的时候我们用hsetnx是可以成功的,而有了之后我们再用hsetnx来插入f3是会失败的。

12. hincrby
这个指令的话就是给field对应的那个value的值进行增加或者减少操作。
语法:
sql
hincrby key field 要加或减的值
我们看下面这张图片,这个指令的话既可以加数字也可以减数字,只要我们在原本的数字前面加一个负号就好。

13. hincrbyfloat
这个指令的话和上面那个很像,不同的地方就是这个是可以给浮点数进行浮点数的加减的。
注意:这个指令不止可以给浮点数用,他也可以给整数用,同时它的值也可以为整数。
语法:
sql
hincrbyfloat key field 要加或减的值
我们看下面这张图片,这个hincrbyfloat即可以给整数加浮点数,也可以给浮点数加整数。

