前面我们学习了数据类型中的string类型,一般来说我们在开发中常用的就是string类型,但是它并不是万能的,string类型存在一个问题,下面我们就通过这问题来引出我们的要学习的新类型hash类型。
存在的问题
对象类数据(例如User、Employee)的存储如果使用string类型存储的话,当出现频繁更新操作的情况下会显得笨重,而且多条数据聚合不方便(例如姓名、出生日期、地址如果要入局)。如果用json的方式存储的话,每次修改一个属性时都需要把整个数据取出来修改。那么我们该怎么办呢 ?我们可以key不变,但是value中按照field:vlaue 的形式存储,其中field是属性名,value是属性值。把这个解决方法转化成图就是这样的:
上图这种存储方式就是hash类型的存储方式。
hash类型
- 为什么会出现hash类型:因为要对一系列存储的数据进行编组,方便管理,比较典型的应用场景就是存储对象信息。
- hash类型的存储结构:一个存储空间保存多个键值对数据,如下图所示:
- 什么是hash类型:底层使用hash表结构实现存储数据的类型
- hash类型所作的存储优化:
- 当field数据量较少时,存储结构优化为数组结构;
- 当field数据量较多时,存储结构有华为hashmap结构。
基本操作
在这一小节我们就来讲一下hash类型的基本操作。
- 添加/修改数据,使用 hset,语法为haset key field value,例如设置user存储name的值为anna,可以这么写命令
hset user name anna
- 获取数据,使用hget,语法为hget key field,例如设置获取user中存储的name的值,命令这么写
hget user name
- 删除数据,使用hdel,语法为hdel key field1 [field2,…,fieldn],例如删除user中的name,命令这么些写
hdel user name
。 - 添加修改多个数据,使用hmset,语法为hmset key field1 value1 field2 value2,例如在user中添加name和address,命令这么些写
hmset user name anna address XXXX
。 - 获取多个数据,使用hmget,语法为hmget key field1 field2,例如获取user中的name和address的值,命令这么写
hmget user name address
。 - 获取哈希表中字段的数量,使用hlen,语法hlen key,例如获取user中的字段数量,命令这么写
hlen user
- 获取哈希表中是否存在指定的字段,使用hexists,语法hexist key field,例如判断user中是否存在 age字段,命令这么写
hexists user age
,返回1表示存在该字段,返回0表示不存在
小结
这篇文章稍长,核心内容是hash类型的基本操作命令,同时讲解了string类型存储数据的存在的问题,以及hash类型的简介。