00:01
各位同学大家好,下面呢,我们继续来学习red里边常用的数据类型,刚才呢,咱们把这个集合set已经也示完成了,那下面呢,我们看下一个类型,就是这个哈希类型,那哈希类型什么特点?首先给大家先做个介绍,我们来看一下啊,瑞里边的哈希是一个什么?是一个间值对的集合,就是咱们通俗说的KY6,类似我们的map,而瑞哈希是一个此类型的什么叫field y的一个映射表,它特别适合存储对象,类似于咱们债务中的外这么一个结构。那这句话什么意思?给大家来说一下啊,比如我们现在咱知道哈希呢是一个k value6,因为咱read就是一个k value,比如它里边有一个K。然后有一个value,比如说它的key呢,假如说咱们是一个叫做U色,这是它的K,然后里边有Y,它的value中存的呢,并不是说普通一个值,它的值按照一个对应惯性定存储,叫做field的value,那什么叫费的value,给大家举个例子啊。
01:12
比如说我现在在我这里边,我存的是你的右侧信息,那比如这里边的field,假如说是它的ID,然后这个Y指是ID值,比如说我们是一,然后这个field,比如说我们是name,然后它的值是这个张三,比如说里边的field是一个A值,然后它的值是一个20,所以它里面是按照这种形式进行存储的,也就是说这里边的。User是它的这个key,然后它的value部分是一个view的value,这么一个对应关系,就这里提到这么一个叫映射表关系,通过里边的field对应它的Y流,这整体部分是它的Y流值,这就是哈希的这种存储的特点,这各位给得知道,而这里特别提到这种形式呢,特别适合存储对象,类似于咱们Java中的map结构中,这个特点就是你是K是string y6是一个类型。
02:14
那这个什么特点,下面给各位来举个例子,再来说明一下,我这里强调大家把这结构先给他弄清楚,然后再来使用它里面的命令会更加的清晰,那我们看一下这个例子是什么,比如说举个例子啊,假如我现在呢。我想在我这个就是ready里边呢,存入一个对象,比如说我的对象啊。假如说是这种形式。比如咱们大概写一下啊,比如说我的对象中有个IDID值呢,比如是这个就是啊,比如ID等于一,然后里边name,我们等于这个张三。然后里边的这个age我们等于20,包括等等数据,比如现在我想把这对象存到我们的位置中去,那咱们怎么进行存储呢?给大家来说一下,各位也可以想一下,咱们怎么把一个对象直接存到我们的外中去呢?怎么存啊,当然这里边指呢,并不是直接用new那个对象,是把里面的值存进去,那怎么做?给各位说一下啊,首先我们的。
03:19
第一种存储方式。第一种咱是不是可以把这个对象呢,直接变成一个字符串,比如说变成一个第存字符串,或者说给他做一个序列化操作,然后在专中我们可以做个操作,比如说它里面的key,我们就叫这个user。然后它的Y6值就等于我们这一段,就是Jason的这个字符串,比如字符串中咱们就是ID等于一,Name等于这个张三,然后age等于20,咱把这部分直接存到Y6中是不是可以了,这是它的K,然后这是它的Y6部分,我们现在就可以这种方式进行存储,这是我们的第一种方案,但是这种方式呢,虽然可以存储,大家可以看一下,你说这种方式存储它有什么缺点?
04:09
大家想一下什么缺点,各位注意啊,比如我现在啊,我想去改一下里边的某个值,比如说每年他这人的这个年龄是不是要加一啊,那咱用这种方式改的话,我这个数据是不是要都取出来呀,然后取出来之后怎么做,把它是不是先给它变成对象,然后对象变成之后把值给它改成,比如改成21,然后把这对象再转成JC,再存到re中去,是不是这过程特别麻烦,就是先变成对象,然后改值完之后再变成这字符串,然后最终再存到RA中去,所以这种方式肯定特别不方便,咱们实际终一般也不用这种方式进行存储,那怎么做呢?所以这个时候呢,我们就有了第二种方式进行操作。而第二种怎么做呢?给各位来说一下啊,第二种做法就是咱们把数据给他分开进行存储,那什么叫分开存储呢?比如说写一下,比如现在我这里边我的K,比如叫user啊,比如咱们加一个冒号IDID值呢,我们就是一,然后第二个加个user name name值,我们就叫张三。
05:20
比如里边我再加第三个U冒号,我们叫age age值咱是20,所以现在我可以把这数据用这种形式进行存储,而这个存储大家看到是不是也是KY6结构,用它做到。这是我们的第二种方案,但是这种方案也有它的缺点。咱先看优点啊,优点很明确,比如现在我想改它的年龄,那咱直接把这一段数据取出来改是不是就可以了,不需要做别的操作,别的数据不需要变,但是它有一个致命的缺点,你注意啊,我这么存数据是不是太分散了?假如说我这右侧里边啊,有十几个,这个就是字段的值,那咱要存十几次,而我这里边又有多个右侧对象,那你如果这么存的话,造成你存储是不是特别混乱,比如我这里边有100个优惠对象,而每个优惠对象中又有十几个字段,那最终存到里边之后,会发现它的结构会特别的混乱,所以这种方式我们也是不用的,那咱怎么做呢?就最终引出了咱们的第三种方乱。
06:27
而第三种呢,就是咱目前说这个哈希的这种方式,那这种方式该怎么去做,给大家来画一下啊,比如说首先他的K咱们还是user,但是Y6跟之前就不一样了,而Y6怎么做呢?我在里边写一下啊,或者各位先看下我的图上,咱可以让它用这个field加value这种形式,这种映射关系性存储,那我来画一下,比如现在key就是U,然后value中,比如咱加一个就是。U啊,比如就加一个DD,对应的就是一。
07:04
然后加一个name name对应的就是张三,比如说我再加最后一个age,对应的就是这个20,咱们用这种形式进行存储,而存的过程中各位注意啊,左边的U色是咱的K,右边的这部分是咱的Y6,只是value,是一个映射关系,而这个时候当我们要找到里边某值的话,怎么找呢?咱就通过里边这个K再加上它那个就是field,比如说找这个ID比说找age,比如说找name,通过这种形式找到,所以这是第三种方式,而这种好处就是第一个存储更加方便,然后第二个取值改值更加方便。所以咱们第三种方式就是哈希的存储特点,各位把知道KY6 Y6中是field加Y6这种映射关系。所以这是关于它的一个结构的一个说明,大家把这知道课件中也都写到了,就是我刚才讲到的这么一个过程。
08:07
那这个结构大家弄清楚之后呢,然后下面给各位就演示一下里面这些常用的操作命令,命令比较简单,咱就快速演示一下啊,但你要注意它的结构,Field value这么一种映射关系,那咱们做操作首先来到radio中,为了方便先做一个清空。然后清空之后,我们演示第一个操作,用h set向哈希里边添加数据,那我们来加一下啊,我们写一个h set,它的K,比如说我就叫user色冒号啊,咱就为了区分啊101,然后里面加个field field我们是ID6值,咱就是这个一。这是加的一个数据,比如我再加一个,第二个我加个name,它叫张三,所以现在咱通过h set向哈希中加的数据,然后咱们可以取数据用h get,那我来取一下啊。
09:08
注意怎么取啊,加上你的K。再加上你的feel的名称,比如我们ID是不是就是一,比如咱们取这个name,那就是正三,这样的话,两个基本命令做了演示,H site和h get,另外咱们可以一次性批量加入多个数据,用这个命令HM site,那我来演示一下啊,HM。Site,比如说我换一个啊,我叫USER1002,然后咱们是ID name,比如叫呃,咱为了区分啊,ID2NAME李四,然后这个age。30现在我向里边就加了这么一个关系,ID name和A6关系,这是HM set给各位做了演示。然后演了之后呢,我们看下一个啊叫h exist,就是判断你这里边的field是否存在,就是K里边是不是有一个field存在,那咱们来测试一下啊,我们来试一下exist。
10:13
比如我们叫USER1002ID。打看这个值,哎,少个冒号啊,User冒号102ID这值反是不是一证明它存在,我们再查一个name。是不是存在,比如说咱们换一个没有的,我们用这个真的。是反应零,表示里边不存在这个field,这个叫H1Z,然后还有下面几个,有这个HK,查看哈希机构中的所有field,那咱们快速测试一下啊。这个。HK,我们叫user色冒号1002,然后里边是不是ID name和H都查出来了,包括下一个HVLS,查看里边的所有Y6值啊,就是Y6什么,它叫VLS,简称U色冒号1002,里边的值是不是得到了,就是二理四和30啊,所以这几个命令我这里演示大家也看到了,应该都会特别的简单,各位给他会用就可以了。然后最后还有两个命令,一个叫H因可BY,它就是在我们的值里边可以他做一个相加操作,比如说你可以加一加二,里面可以加上你要加的值,那咱们来试一下啊,这个命令。
11:36
H因可谓BY,咱们加上这个k user冒号1002,然后H,比如我们给它加上这个二。你看啊,最终返回值是不是32,就是把这个值我们加了二,然后还有最后一个命令叫h set NX,它也是用于加数据的。NX,比如说我们这个U冒号1002,注意啊,这个添加有个特点,如果说你的K在你这个里边已经存在,那它不能添加,当你不存在才可以添加,那我们试一下啊,比如说我加一个age,咱来一个40。
12:18
大家看返回什么是不是零啊,就是你不能添加,因为在这里边的H已经存在,比如咱们加一个不存在的,我们叫真。比如来一个一,现在反应值是不是就是一,证明你现在可以往里面加,比如咱们查看一下啊H。Case我们叫USER1002 gender是不加进去了,包括用这个HVLS。我们叫U色冒号1002,这里边的一是不是也加进去了,所以这些呢,都是针对我们哈希类型中常用的命令,给各位就都简示完成了,各位把它知道啊,然后最后这里写到了哈希对应的注意结构有两种,一种就是咱刚才说那个压缩列表,还一个叫哈希表,这里写到啊,当你的feel的VALUE6长度短并且数量少的时候,它用的就是这个压缩列表,当你的数量多或者长度比较长的话,它用这个叫哈希table,哈希table进行存储,所以这是它一个就能结构就是它会结合这个压缩列表加哈希表结合使用,当你数据量小,长度短,用这个压缩列表,否则用这个表哈希table。
13:33
所以这以上就是关于咱们说明的RA中的长类型哈希类型的一个相关操作,给各位就都演示完成了。
我来说两句