00:01
各位同学大家好,下面我们继续来学习READY6刚才呢,给大家介绍到了red中的八布和订阅,咱们通过具体例子给大家演示里边的对过程,那下面我们继续学习中的其他内容,然后下面我们学什么呢?给大家介绍一下re中的新的垂类型。咱们刚才介绍到了red中的五大基本数据类型,但是red在它的新版本中又出现了几个新的数据类型,那我下面给各位来做一个详细介绍。这里边我们介绍三个新的数据类型,咱们首先看第一个类型叫这个bit maps,那这类型怎么样的呢?下面给各位做一个详细说明,咱们看这单词be是不是有那个为的意思啊,就是这个类型啊,主要做的事情是什么呢?就是进行为操作,然后咱们详细说明一下。
01:01
在计算机里边呢,各位同学都知道,它是以这个二进制位作为信息的基础单位,一个字节等于是八位,比如说我们有一个字符串ABC,那ABC呢,这样的就是三个字节,每个字节有八位,而ABC怎么表示呢?它里边ABC对应的二次码那就是。17 98 99,而这三个值对应的二进制,那就是这三个值就是以零,一,零,一里边组成的三个值,最终在计算机中,那就是这种效果,ABC这么样进行表示。而这里边呢,大家注意这个未操作,如果说咱们能够合理使用操作位,能够有效的提高内存使用率和开发效率,就让它操作更加准确,更加有效。而RA中提供这个叫bit maps,就是针对这个way进行操作一个类型,但是其实这个bit maps呢,本身不是一种数据类型,它本身就是个字符串,只说咱对字符串能进行未操作,它是专门进行未操作一个字符串,这各位知道它本身跟我们的字符串操作是基本上是不太一样的,它里边就是以零和一进行存储,其实咱们可以这么看,你把这个be Ms想象成一个以位为单位的一个数组。
02:25
然后这个数组中呢,只能放零和一,数组的下标有一个术语叫做偏移量,就是下面这张图,大家看到啊,这是K,这Y。Y轴中是一个以零、一,零、一代表的一个数组,然后里边有它的索引下标,下标叫做偏移量。这是我们提到的bit maps的这么一个介绍,就是进行未操作的一个字符串。那这个怎么操作,我们看一下啊,首先我们说第一个命令叫set be,就是项里边来添加数据,然后它里边有这么几个参数,第一个你的K,第二个偏移量就是位置,第三个是我们的值,那咱们来做一个操作,大家看啊,比如现在我用这个例子来进行。
03:12
我们现在呢,想统计每个用户是否访问过某个网站,咱把这数据就给他放到我们的bit map中,比如咱们记录,当它访过我们记作一,没有访过记作零,然后用用户ID作为我们的偏移量,比如咱们约定这里边用户ID是一,61 15 19的用户进行访问过,那现在把这个场景,咱就用这个set bit,包括里边这个bit map这个类型,我们做个存储,那大家看这张图上。最终效果就是。20个用户中,这几个里边反过我们变成一,没有反过它的值都是零,那咱下面来做一下这个操作,我们来测试一下啊。
04:00
在里边我们用s beat加上你的K,比如说K,我起个名字就叫users 20210101,加上它的偏移量,咱是第一个ID的用户,它的值是一,表示它访问过,这是我们加的第一个,比如说我再加第二个,第二个呢应该是里边这个就是六的这个用户,那里边我们加上一个。六。然后第三个就是11的这个用户。咱们加上一表示它反过,包括还有15的用户以及19的用户,所以现在咱通过set bit向这个be map里边加上数据,最终效果应该就是这么一个效果,一六十一,15、19这几个位置中的值都是一表示它们就反过了,这是我们做的第一个操作。但是这个bit map呢,也不是说都有优点,它有一个缺点,比如说我们第一次初始化的时候,如果说你偏量特别大,它也会造成啊,RA里边的执行会很慢啊,所以各有利弊,这各位知道一下,那咱往里边发数据之后呢,下面咱通过这个命令叫get bit可以从里边取出它的值,那怎么取里边加上K,加上你的偏移量,把它可以取出来,那咱们来试一下啊,比如用这个get。
05:28
B套加上我们的K。20210101,咱取这个一的偏量,大家看值是不是一啊,比如说再取一个六的偏量,值是不是一,咱取一个八的偏量,值是不是零啊,因为这个没有反过,所以现在第二命令也是完成了,叫这个get be。各位把这知道。然后除了这个之外呢,在里边还有这个命令叫bit count be count什么意思呢?就是统计字符串被设置为一的这个bit数量,比如咱们刚才把里面那个一,61 15,十九变成值是不是一啊,那用bit count把这些值的数量就可以统计出来,那咱们来测试一下啊,比如用这个be count。
06:19
加上USERS20210101。然后咱们回车,大家看反应值是五,因为咱们把五个这个位置中的值变成一,它把这数量就取到了啊,这是我们做的这么一个测试,当然在这个be count中的后面还可以加两个参数,一个开始位置,一个解数位置,那我这里边一个例子,待会各位来看一下啊,比如说我这里写到。咱们现在有一个K叫K1,里边有三个值,就是对应这个零,一、二、三这几个值就是二进制表示,那比如现在呢,我写上这么一个位置,就是从一到二,那什么意思呢?它就表示啊,或许这个下标是一和二中的一的这个个数,那你看啊,一就是0100,这都是零,里边是不是只有一个一,反应值就是一,比如说我们现在得到一和三。
07:15
那就把一到三的三个值都拿到,然后看里面的一有几位,大家数下这是一个,这里没有,这是第二个,这是第三个,最终反应值是不是三应包括这里边,如果说咱写个零到负二,那就表示这里边能取到,就是里边的所有这个值,包括你看啊,这是第一个,第二个有一个负二,负二什么意思呢?表示它的倒数,第二个如果负一,那就表示最后一位,以此类推,统计你这里边一的出现的这么一个个数。最终把你对应的值,比如你百013等等这个值。所以这个叫做bit count,做一个统计设置值为一的这个bit的数量。各位把这知道。
08:03
然后除了它之外呢,下面还一个操作叫这个b op,然后这个是做什么的,它主要做一些就是复合操作,比如说我们做一个交集。病体与或非等等,把这些给它做一些操作,叫b op,那这个怎么来做,我们来也是做一个测试。比如大家看啊。我下面的有个例子,例子是什么呢?比如第一个就是2020年11月4号,第一天呢,有哪些用户绑过,它都是一,包括11月3号有哪些用户绑过,然后最终我们想做操作,想计算出两天都访过网站的用户的总的数量是多少,然后咱们用里边就是里边那个大家看啊,有一个叫按。最终这个操作,然后最终结果就这样子,那下面给各位来做一个测试,咱来试一下啊。
09:01
我就把它复制一下,假如说里边的第一个。咱就来先说一下,2020年11月4号,比如说第一个用户访问过。然后里边就是第二个用户。也访过,包括里边这个第五个这个用户也访过,还有第九用户都仿过,咱把它都设进去。这是2021年11月4号这些用户访问过,然后在那设置2020年11月3号有哪些用户访问过,把这个也是做个设置。注意他们的K不一样啊,这是11月3号,这是第零用户,然后149分别设置一下。这是第一个。这是第四个。然后这是第九个,所以现在我们就做了设置,然后设置之后呢,比如下面我想做个操作,想计算出这两天都访问过网站的用户的总的数量是怎么样的,那这里边咱可以用这个叫be op这个命令,然后实现,那我现在把这命令给各位先。
10:17
复制过来,咱们来详细看一下这个命令啊,就是里边这个操作啊,那我这么来复制啊,我把它拿过来。比如说我先复制。第一部分。然后大家看这写法啊,注意啊,B套op加个什么是不是叫and里,And表示两个里边都取值,然后你看这地方啊,这是我们的这个K,然后K里边因为我取的是10月4号,10月3号都反过的,所以把这个交一起,就10月4号下压线零三。然后在后面呢,再加上我们里边这个与这个值,把这个给各位拿过来。然后咱们不知道这位啊,就是它里面对应那个K啊,因为目前是两个K 11月4号10月3号,就是把这两个取,他们就是都进行反过的值,就是他们值都是一的,这些用户数量最终回车得到了我们最终这么一个数据。
11:15
所以这个啊,是我们做的这么一个操作,然后操作中大家发现啊,这里边反应值是什么。是不是二啊。为什么是二楼,你看里边啊,首先。一。259,然后这里边有一啊,包括有这个二和五,就是现在这里边二和五是不是咱们就是里边都经行操作,所以他也给我们做了一个,就是去除这个操作,因为你的用户中,一的用户,九的用户应该都访过了,他就群体里边就是两个不相同的数据,这个叫做bit op操作,包括大家看这张图上就是清晰的标注出来了,比如你看里边啊,就我们现在。进行访问我的一类用户。
12:01
二的位置用户包括五,包括九,包括这里边014,九,然后最终得到就是我的一的用户都访过了,然后这里边九的用户是不是也都访过了,就是两个都访过里边的这么一个用户数量。啊,这么说可能有同学不太理解啊,说的更通俗点啊,这个我们要做什么呢?就是两天都访问过网站用数量,比如说这用户啊,第11月4号访问过,11月3号也访问过,两天都访问过,那里面得到值就是我的一和九的是不是这两个最终反应值是不是就是二。这么说应该好理解啊,就是我在11月3号访过,10月4号也访过,那把这里边都访过的用户数量得到就是一和九,最终得到值那就是二,这是我们做到的。包括这个操作中,大也可以计算出任意一天都仿回用数量,那我们就在刚才基础之上把那and改成什么,改成O就可以了,就是你访问任何一天里边都计算出来。
13:02
这个就叫做be op的命令,大家把它知道一下就可以了。所以这些呢,是关于我们的这个类型bit maps里边一些基本操作给各位就都说完了,然后说完之后呢,下面有一个简单的比较,咱来看一下啊,就是用这个bit maps和set做比较,那比较是什么呢?咱们看一下首先。假如说现在啊,我们有1亿个用户。然后每天的独立访用户有5000万,那这个时候呢,咱应用集合或者bit map分别存储活跃用户可以得到这个列表,然后里边表示就是他们这样的空间。大家看到啊,集合嘛,每个ID占用的是64位,当然bits只有一位,集合这里边我们需要存储用户量只有这么多,而这bit map一位能存储这么多,最终它的内存的量,大家看到集合占用是400套,而你看到我们的bit map只有多少,是不是最大只有12.5兆,所以它就极大的节约了我们的空间,这是一个最大特点。
14:15
另外很明显,这里边还做了一个存储空间的比较,一天一个月,一年,这里边bit map可以说有绝对的优势,这是它的一个比较,但是这个东西呢,也不是说万能的,如果说你用户量很少,比如说只有几万,甚至说更少用户,那这个时候呢,我们用这个bit map它并不合适,因为大部分值基本上都是零,根据实际我们来选取这个操作,就是一般用它来存储你个活跃用户,他肯定是更加有优势,因为它可以极大节约你的空间。所以这就是关于啊ready中的第一个新的数据类型叫bit map,给各位最终总结一下啊,这个bit maps呢,本身并不是一种数据类型,它只是一个字符串,专门进行未操作的字符串,它里边的主要优势跟set相比,可以极大的节约空间,但是如果说你的活跃用户量不是很大,那用它并不合适,它主要针对我们的活跃用户量进行存储的这么一个类型,用它极大的节约空间,极大的提高你的CPU或者内存的利用率。
15:27
所以这是关于第一个新数据类型的这么一个介绍。
我来说两句