前言

Redis 有五种根底数据结构,原本想把这些数据结构的使用场景和 API 的解析放在一篇,然而我弄完上一篇Redis 字符串 API、使用场景解析,我又放弃了这个想法。是的,我会把他们拆开。一方面不便前面去改变,篇幅也不会那么长,另一方面拆分进去看也是很不便的,是吧,好哥哥们。看我这么贴心还不点赞加关注吗。

概述

Hash 表我想好哥哥们很相熟吧,像 JAVA 中的 HashMap(我只会 JAVA)。每个人对 Hash 的叫法可能也不一样,可能是哈希、字典、关联数组等等。
在 Redis 中,Hash 类型是指键对应值自身又是一个键值对构造,相似 value={{field,value}。如图

1 常用命令

1.1 设置值

 ## 格局 hset key field value ## 为用户1增加一对field-value,胜利返回1,反之就是0 hset user:1 name test

1.2 设置值-hsetnx

 ## 格局,这个命令跟String的set、setnx逻辑是一样的,然而其作用域由键变为field,不懂的能够看下上一篇 hsetnx key_name field value ## 再次执行上面这个命令会不胜利,因为name 曾经存在了 hsetnx user:1 name test

1.3 获取值

 ## 格局,须要同时制订key和field hget key field ## 获取user:1key上面的name hget user:1 name

1.4 删除 field

 ## 格局,能够删除多个field hdel key field [field ...] ## 删除user:1上面name和age hdel user:1 name age

1.5 统计 field 的个数

 ## 格局 hlen key ## 统计user:1field的个数 hlen user:1

1.6 批量设值/获取 field-value

 ## 格局 hmget key field [field ...] hmset key field value [field value ...] ## 获取user:1下的name和age hmget user:1 name age ## 批量设置user:1的field hmset user:1 name test2 age 12 city guangzhou

1.7 判断 field 是否存在

 ## 格局 hexists key field ## 判断user:1下的name是否存在,存在返回1,否则0 hexists user:1 name

1.8 获取所有 field

 ## 格局,怎么不叫hfields,Antirez 你误导我 hkeys key ## 返回user:1 下所有的field hkeys user:1

1.9 获取所有 value

 ## 格局 hvals key ## 返回user:1 下所有的value hvals user:1

1.10 获取所有的 field-value

 ## 格局 尽量不要用这个,如果是一个大key的话,field很多,可能会让Redis阻塞很久 hgetall key ## 返回user:1 下所有的fiele和value hgetall user:1

2 命令工夫复杂度

老规矩,放个图不过分吧

3 利用场景

实际上 Hash 存的实质上来说还是 String,咱们能够把咱们的实体对象转换成 JSON 字符串而后存进去,当然也能够按字段对应存入 Hash,两张模式都是 OK 的。次要咱们能够依据理论状况思考,如果说咱们的实体字段太多的话就不倡议存 Hash 了。当咱们的实体有某个字段须要频繁批改时就不倡议存 String,因为只是改了其中的某一个字段,显著存 Hash 更正当一些。比方像购物车这种,能够用用户 id 为 key,商品 id 为 field,商品数量为 value,一个用户购物车又会有多条记录。
总的来说个别对象用 string + json 存储,对象中某些频繁变动的属性抽出来用 hash 存储,好哥哥们依据理论的场景看着应用吧。
另外一方面的话就是存储对象。和关系型的数据库存储比照,失常像 mysql 这种是按行显示的,而 Hash 的话则以单个对象来显示的,见下图。

本期就到这啦,有不对的中央欢送好哥哥们评论区留言,另外$\color{#FF0000}{求关注、求点赞}$

下一篇:Redis List 使用场景、API 解析
上一篇:Reids 字符串 API、使用场景解析