1.11.5哈希类型(hash)
 Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。
 哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感
 兴趣的业务数据。
1.11.5.1hset
 语法:hset key field value [field value …]
 功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。
 返回值:返回设置成功的键值对个数。
 
1.11.5.2hget
 语法:hget key field
 功能:获取哈希表 key 中给定域 field 的值。
 返回值:field域的值,如果key不存在或者field不存在返回nil。
 
1.11.5.3hmset
 语法:hmset key field value [field value…]
 功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.
 返回值:设置成功返回ok,如果失败返回一个错误。
 
1.11.5.4hmget
 语法:hmget key field [field…]
 功能:获取哈希表 key 中一个或多个给定域的值
 返回值:返回和field顺序对应的值,如果field不存在,返回nil。
 
1.11.5.5hgetall
 语法:hgetall key
 功能:获取哈希表 key 中所有的域和值
 返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.
 
1.11.5.6hdel
 语法:hdel key field [field…]
 功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
 返回值:成功删除的field的数量。
 
1.11.5.7hlen
 语法:hlen key
 功能:获取哈希表 key 中域field的个数
 返回值:数值,field的个数。key不存在返回0.
 
1.11.5.8hexists
 语法:hexists key field
 功能:查看哈希表 key 中,给定域 field 是否存在
 返回值:如果field存在,返回1,其他返回0。
 
1.11.5.9hkeys
 语法:hkeys key
 功能:查看哈希表 key 中的所有field域列表
 返回值:包含所有field的列表,key不存在返回空列表
 
1.11.5.10hvals
 语法:hvals key
 功能:返回哈希表 中所有域的值列表
 返回值:包含哈希表所有域值的列表,key不存在返回空列表。
 
1.11.5.11hincrby
 语法:hincrby key field int
 功能:给哈希表key中的field域增加int
 返回值:返回增加之后的field域的值
 
1.11.5.12hincrbyfloat
 语法:hincrbyfloat key field float
 功能:给哈希表key中的field域增加float
 返回值:返回增加之后的field域的值
 
1.11.5.13hsetnx
 语法:hsetnx key field value
 功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
 返回值:设值成功返回1,其他返回0.
 
 内部编码
 哈希类型 的 内部编码 有两种:
2.1. ziplist(压缩列表)
 当 哈希类型 元素个数 小于 hash-max-ziplist-entries 配置(默认 512 个)、同时 所有值 都 小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为 哈希 的 内部实现,ziplist 使用更加 紧凑的结构 实现多个元素的 连续存储,所以在 节省内存 方面比 hashtable 更加优秀。
2.2. hashtable(哈希表)
 当 哈希类型 无法满足 ziplist 的条件时,Redis 会使用 hashtable 作为 哈希 的 内部实现,因为此时 ziplist 的 读写效率 会下降,而 hashtable 的读写 时间复杂度 为 O(1)。
下面的示例演示了 哈希类型 的 内部编码,以及相应的变化。
当 field 个数 比较少,且没有大的 value 时,内部编码 为 ziplist:
127.0.0.1:6379> hmset hashkey f1 v1 f2 v2
 OK
 127.0.0.1:6379> object encoding hashkey
 “ziplist”
 当有 value大于64 字节时,内部编码 会由 ziplist 变为 hashtable:
 127.0.0.1:6379> hset hashkey f3 “one string is bigger than 64 byte…忽略…”
 OK
 127.0.0.1:6379> object encoding hashkey
 “hashtable”
 当 field 个数 超过512,内部编码 也会由 ziplist 变为 hashtable:
 127.0.0.1:6379> hmset hashkey f1 v1 f2 v2 f3 v3 … f513 v513
 OK
 127.0.0.1:6379> object encoding hashkey
 “hashtable”










![[Linux] 3.Linux下编码和执行文件](https://img-blog.csdnimg.cn/4411d9a738cc42eaa8e8a6a02469381f.png)








