zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

【地铁上的Redis与C#】数据类型(五)--Hash类型

2023-03-07 09:50:39 时间

前面我们学习了数据类型中的string类型,一般来说我们在开发中常用的就是string类型,但是它并不是万能的,string类型存在一个问题,下面我们就通过这问题来引出我们的要学习的新类型hash类型。

存在的问题

对象类数据(例如User、Employee)的存储如果使用string类型存储的话,当出现频繁更新操作的情况下会显得笨重,而且多条数据聚合不方便(例如姓名、出生日期、地址如果要入局)。如果用json的方式存储的话,每次修改一个属性时都需要把整个数据取出来修改。那么我们该怎么办呢 ?我们可以key不变,但是value中按照field:vlaue 的形式存储,其中field是属性名,value是属性值。把这个解决方法转化成图就是这样的:

上图这种存储方式就是hash类型的存储方式。

hash类型

  1. 为什么会出现hash类型:因为要对一系列存储的数据进行编组,方便管理,比较典型的应用场景就是存储对象信息。
  2. hash类型的存储结构:一个存储空间保存多个键值对数据,如下图所示:
  1. 什么是hash类型:底层使用hash表结构实现存储数据的类型
  2. hash类型所作的存储优化:
  • 当field数据量较少时,存储结构优化为数组结构;
  • 当field数据量较多时,存储结构有华为hashmap结构。

基本操作

在这一小节我们就来讲一下hash类型的基本操作。

  1. 添加/修改数据,使用 hset,语法为haset key field value,例如设置user存储name的值为anna,可以这么写命令hset user name anna
  2. 获取数据,使用hget,语法为hget key field,例如设置获取user中存储的name的值,命令这么写hget user name
  3. 删除数据,使用hdel,语法为hdel key field1 [field2,…,fieldn],例如删除user中的name,命令这么些写hdel user name
  4. 添加修改多个数据,使用hmset,语法为hmset key field1 value1 field2 value2,例如在user中添加name和address,命令这么些写hmset user name anna address XXXX
  5. 获取多个数据,使用hmget,语法为hmget key field1 field2,例如获取user中的name和address的值,命令这么写hmget user name address
  6. 获取哈希表中字段的数量,使用hlen,语法hlen key,例如获取user中的字段数量,命令这么写hlen user
  7. 获取哈希表中是否存在指定的字段,使用hexists,语法hexist key field,例如判断user中是否存在 age字段,命令这么写hexists user age,返回1表示存在该字段,返回0表示不存在

小结

这篇文章稍长,核心内容是hash类型的基本操作命令,同时讲解了string类型存储数据的存在的问题,以及hash类型的简介。