00:00
各位同学大家好,我们继续接下来就要进入我们ready STEM流的第二部分基本命令代码实操阶段,那么杨格三班斧理论实操小总结够。Ready流实例演示,那么也就是上面这些讲直线命令怎么落地的实现呢?来吧,第一组队列相关的指令,那说白了就是说如何往string里面添加我们的消息来,它的命令有这么多,那么也就是我们上面啊这圈好了,挨个说来吧第一个。添加消息到队列的末尾,那说白了是不是就是个消息队列嘛,先进先出啊,那么。怎么用我们的消息添加我们队列呢?再进一步的说,用XAD这个命令把我们的消息内容添加进我们的stream,那首先它有些要求啊,消息的ID必须比上一个ID要大,那么我们在买CQ里面是不是有个自增主键,自增的主见下一条是不是要比上一条ID要大?第二个默认是用星号表示自动生成的一种规矩。
01:10
在这我们这有个星号的解释啊,说白了就是。用于X命令当中,让系统自动生成ID,这个ID是什么意思呢?有点类似于我们MYSQL的自增组件,MYSQL里面是不是有个东西叫auto自增ID那么一样,我们每一次往我们的stream里面添加消息时候,也要产生一个message消息ID,这个ID类似于自增主件,它的生成规矩由stream给你负责,你不用人工干预。好,那么同学们先演示命令,我们来看一下啊。先看命令,再说理论,那么大家请看XAD,这个K叫my stream,然后我干什么呢?中间这些是一些中括号,我就不废话,它这有个新或者ID,意思就是说每一个消息默认要有个message ID这个主件,你要是用星号有系统默认给你生成,要么人工你自己指定,接下来field value field value是多个,换句话说,它的意思就说。
02:12
你到后面再给我一个field value的键值,对,好,那么大家请看型号,完了以后我这ID11C name客夫叫张三,好,再来一个啊,12这个客户我叫李四同学们没问题吧,那么我再来一条啊,假设这个叫。玩五,那这个ID我叫13,当然你可以写多个啊,或者你要是觉得不OK的话,我这就写K1V1 K2V2 K3V3,同学们能跟上。这个时候同学们请看我每一个XAD命令执行完成以后,它都会给我生成一个这么一个东东,这个就是我们的消息ID,明白好,那么同学们往下看理论讲解。
03:06
Ad,它实现STEM队列当中添加消息,如果没有这个队列,我们直接化二为一。直接新建加新增消息,一条龙一个命令搞定。那么这个星号。表示服务器自动生成的message ID类似于我们MYSQ里面的主件,那么后面是跟着我们一堆TV键值,对,那么它的格式啊,生成的消息ID是有两份构成。中间减号,前面这个是叫毫秒级的时间戳,然后后面这个是在同一毫秒下面,这个时间点下面的第一条消息下边从零开始啊,那么这个时候就会导致什么非常爽的一个地方,就是相同毫秒下面。理论上同一毫秒内生成的数量,它是序号是64位的这么一个长度,可以有很多,它无法达到这么多,也就怎么着够你用怎么着,我们的消息ID尽量可以做到不会重复,那么我们每次生成一个啊,同学们请看这个尾号是7894这个尾号。
04:07
47894下面是不是53261下面又是七,那是不是一定是后面的ID会比前面大,那么这样是不是保证我们的消息ID不重复?所以我们在增加消息条目的时候,会检查当前ID与上一条ID的条目。存在自动纠错的情况,会保自动保证后面的ID会比前面大,那么所以说我们在这儿客户端它显示传入的规矩就是时间戳减号自身ID这样的一种方式,后续ID不能小于前一个,那么我们的消息内容,那么就是我们这的field value field value一个TV建支队,OK,好,那么同学们如果。我非要头铁。我现在想看看这个会时间一样会报什么错呢?我们答案搂一眼啊,我还是这条记录,现在他的意思就是说个是系统默认,这个是你自己指定,那来吧,那我自己指定一下,我想同一时间段产生同样的消息,支不支持啊,根本不支持啊报错,当然如果是同一时间段,你这个消息是一,那相当于说在同一秒钟。
05:18
这个时间戳下面有另外一条,那么这个是可以成功,那是后话,OK,好,那么同学们,这个就是我们的第一个命令XAD下面X strange,那么在完成这个之前啊,我们先来看一下啊,Type my stream,那么大家看一下它呢,应该是什么类型呢?和之前的那些经典数据类型没有关系,我自成一体,星成一脉,我就是我stream OK,好,那么下面X range,那是不是范围检索要查看了,我现在丢了那么多消息进去,那么首先start用减号最小and用加号,看有点像MY的limit分页,看看你显示多少条,那么来吧,Strange my stream,那么从小到大全部显示,我们大家请看每一个消息啊。
06:10
123这么说能跟上,只不过在这一个主键,在这个时间戳下面你的消息内容是有这么多,OK,可能一条,可能多条,好,那么下面我们呢,看写好我只返回几条,只返回一条,那么同学们请看,那是不是就顺理成章往下缩一条,好,这是我们的第二个命令,那么下面第三一个,这叫什么?Re是不是叫反转?那么X rev range,那么这个是MY。Stream,那么这个时候请看它是什么,不是减号到加号,它反过来加号到减号,那说白了是不是把我们的。调个个,一个是升序,一个是降序,给大家进行输出,好,那么同学们,这是我们的第二个。
07:00
第三个。那么第四个X delete1说也应该明白吧?来同学们请看我们这X range演示以后,它怎么删X在这个K里面删,你删哪个,它是按主键删明白,按照这个时间戳逐键好,那么同学们,我们大概给大家演示一下my stream减号加全部演示X delete,那么这个是my stream。好,你要删哪个呢?那假设啊,同学们,我就把这个将其删除好,返回一成功,现在只有几条了,一条两条OK,好,那这个是我们的X delete,那么X length就是多少个?好吧,那么来吧,X length my stream里面有几条记录,两个注意啊,一条记录有一个ID,我们只认这个ID,至于说ID后面这个,这个是key,这个是value,这个value里面可能可以是个计算串就可以,我们不关心这个value,不关心我们只关心这个时间戳,逐渐ID好,那么下面这个完了,那么这个呢,X extreme什么意思啊?什么叫截取的意思啊,同学们请看啊。
08:08
它情况是这样的,由于对stream的长度进行截取,如果超长了。砍一点,一个叫max length,一个叫最小ID,好,同学们请看允许的最大长度对硫进行修剪限制,那么它的意思这样的,现在我们这啊,同学们lawyer,呃,X,我加点东西啊,My dreamam,那么假设新,那么这个时候ke v1,那么再来这个是K1,这K2V2没问题吧,好了,那么X range my stream,减号加号,同学们请看1234我有几条,我有四条没问题吧,那么这个时候extreme我要按照最大长度解两个,那么同学们请看。这个时候啊,最大长度接两条,就是这个时间戳靠后的,那么大家请看X stream,然后my stream,那么MAS这个是max,那么好。
09:14
截几个呀,截两个,同学们OK,那么再来看,我们来对比一下前面的时间,戳前面的大家请看是不是一跟二被截掉,只剩下现在后面的时间串大一点的,这么说能跟上,OK,好,那么再来看这个,我们完成了,这是我们最大,那么最小的就是允许最小的ID。从某个ID值开始,比该ID值小的将会被抛弃,那么同学们请看,这个是它的时间戳,这个叫4966,这个叫7574,我这来截取,按照最小的ID,比如说4966 4966就是最小的了,那么现在比我还小的有没有啊,没有,所以说我们来看还是两条,那么下面如果我们反过来说比7574还要小的有没有胆小了,4966就比我小,那么这个时候在这个比我小的之前的全部干掉,那么这个时候大家请看是不是就有一条被灭掉了,只剩下时间戳是7574的。好,那么同学们,我们来来给大家看一下strange my stream,这个是减减,OK,哎,My stream,减加。
10:24
好,那么下面有这个,那么X stream my stream,那么下面我们就那么in ID,你要比哪个小啊,我要比这个小的,那么同学们请看有没有没有,那反过来讲,你要比哪个小的,我要比这个小的有没有,那么这个时候诶,有搞头就有一条,那么来同学们一回车,好,这个时候我再来全部查一遍,那么大家请看是不是我们的K1就被干掉,只留下了K2,哎,所以说这个是一个什么?消息的截取,那么一个是按照最大的,一个按照最小的,那么下面XRAID读,那么来吧。
11:03
用于获取消息,那么我们有消息添加了以后是要读取只会返回大于指定ID的消息啊,那么这个时候,那么同学们,我们呢,直接呢,先添点东西X。来这个手势,那么XADD啊my stream,那么现在新,那么K3V3 OKK4V4来吧,那么这样呢,就K5V5,好,我先添点东西了啊,完了以后我们这个有ID呢,就更大一些,下面它的公式这样,XRAID读取。看那么多少条你读。一条还是两条,这个blocking是不是以阻塞的方式来进行读取?注意这有个关键词叫stream s哪几个T好了,那么下面它的意思就是说这个你没写默认是不阻塞,而如果你这个设置为零,代表永远阻塞,那么这个是不是有点像我们加法里面的阻塞队列?OK,好,那么同学们请看我演示,下面这个叫非阻塞啊。
12:05
它有两个,首先X RA count,二假设我只显示两条啊,我现在X range my stream减加几条,三条再添加点吧卖。Stream,然后呢,这个K6V6,好,这个是K7,好,这个是V7 OK,那么来吧,兄弟们,这个时候是不是12345总共有五条记录,没问题吧,时间呢,就前后错开了,那下面我的意思是这样的,它的X RA count2就代表读几条,往这个队列里面读两条streams关键词的固定写词MY,哪个key my stream,注意这个Dollar是意思是什么意思?就是说已经表示STEM已经存储的最大的一个ID的后一个意思就是说我现在如果用Dollar是我现在最新的时间ID是不是这个,我要找一个比他还要再大的一个。
13:00
听懂,哎,这个是什么?比当前最大的还要大的,什么意思啊,那说明什么?这一条的下一条OK,好,如果没有我们呢,直接返回,那那么下面请同学们先看杨格演示XRA,那么看我这里面是不是有五条,我返回两条。先不加这个固定写死啊,那么这个叫stream。那么来这个key是哪个my stream,然后的话呢,我们这符号写的是什么。Dollar,有没有没有,因为现在最高峰就是它没有比它更大的,但是反过来讲,如果我们现在呢是零,零呢,就表示是吗?从最小开始,相当于说从头读到尾,那么来同学们现在呢,我们呢,和刚才一样零杠零,OK,那么来同学们。有没有给我演示啊,在这个K里面对吧,给我读出了这个这个这个是不是两条,那么假设你再多一点么,十条,那同学们是不是在这个K里面给我读出了12345全部显示,这么说能跟上OK好所以说呢,这个000减零啊,或者是用。
14:19
不使用零减零,用这种东东也可以,我这儿给大家写了个演示,那么下面这个。我就不再敲代码了,OK,如果你不指定看的话,那么就是返回所有的OK,好,那么这是我们一个,那么下面啊。这个呢是叫阻塞,阻塞的意思是什么呢?那么来吧,弟兄们,我们现在呢来XRA,你看左边这个叫什么消费者啊,我要等着去读消息,然后呢,注意前面我前面我所有课没有写这个block,默认不要用阻塞的,听懂了吧?那下面我假设给大家演示BLOCK0在代表阻塞队列,那么。有这么一个动作,好这个呢,我们先来看啊,我们在这。
15:05
COUNT1OK,那么来看1BLOCK0。好了,那么streams。固定将其写死,OK,然后my dream要井号来,这个就不是两个零了。My streams要到了,相当于是它就在这儿监听,要比我当前最新的那个还要更新,那说明什么?当前的下一条,我这一回车这儿耗着了啊,那新开一个客户端杠A123456连起来了,那么XADD,假设这个K也是myream星号,然后呢是K8 v8,同学们请看是不是要比当前最新的新浪,哎,他发现一有它这边马上就读取过来,那么你要只需要用简单的用这样的命令就可以完成一个阻塞队列,是不是就是我们最经典的一个生产者消费者模式,然后他告诉你他等了多长时间,等了15秒钟,OK,好,那么同学们,这个就是我们的X非阻塞和阻塞两种写法,就看你加不加这个block的,好,那么同学们。
16:15
小总结,就是类似我们Java里面的阻塞队列,那么来进行一下我们的这个对比,STEM的基础方法就是使用ad。发送数据或者叫存入消息,用XRA来循环,从这个stream里面读取消息,就可以实现简易版的消息队列,那么两个一对比,我相信大家应该没话说了吧。生产者,生产者这个如果你用STREAM0,我用X,这个如果你用list,我用的是l push这个读取拉数据,如果你用stream,我用X read,你呢,叫air,兄弟们一清二楚了吧,OK,好,兄弟们,这个就是我们队列相关,也即跟。更多的是偏生产者相关的内容,接下来给大家介绍一下消费组的相关指令。
我来说两句