00:00
好,接下来呢,咱们还有一点事情要去说明啊,那现在为止呢,我们看看这个需求就搞定了,但是呢,它里边还有不好的点在于什么呢?我给大家举个例子,大家就明白了。啊,来看啊。比如说我呢,Mid。对吧,有个人MID11。他呢,在5月1号登录了。好,但是这是第一次啊,那它的状态是什么?是不是保留的5月1号。没有问题吧,这块啊,这个肯定没有问题,我就不等大家扣一了啊啊,那接下来呢,我呢在5月2号5月3号一直没有登录,我下一次登录什么时候呢,还是这个M啊m mid肯定不变对吧,按照它去重,我在五月。17号。我又等我。啊,当然按照我们的逻辑,我们所写的是不是这条数据会被保留,这条数据也会被保留。
01:01
对吧,倒是没有问题,且我们的状态会被修改,为什么?5月17号。对吧,且我们的状态会被修改为5月17号到这块大家有没有问题,没有问题扣一对吧,两条数据都会被保留下来,就是返回的都是处对吧,且我们的。状态会被修改成五月17。这块应该没有问题吧,好,但是我们想一下啊。他在5月2号对吧,341直到16对吧,点点点。这中间呢,我没有登录过,没有这个MID11的数据,但是它的状态都是多少。是不是一直持续到5月16号,他的状态都是5月1号,大家想对不对,这个有没有问题。咱们一步一步走啊。
02:01
这个有没有问题?没有问题吧,好。那我们再想一个问题,现在呢,咱求的是日活。对吧,呃。我们这样说,这个状态呢,我们存的是当天的日期,对吧,而且我们的判断条件。是什么呢?是状态等于now。或者状态时间与当前时间不同,我都保留,那也就是说当我状态等于那。或者状态。它跟今天不同的时候,这两种情况是不是一样的,所以当时我们写的是if,哎,或者的关系。
03:04
它俩是不是一样的情况,大家想。对不对。它俩是一样的吧。好。那这边就有一个点了。那到了第二天,假如说我头一天保存了一个状态,对吧,到了第二天。就第二天来看啊,5月1号保存的一个状态,就5月2号来看。那我状态是那跟是5月1号是不是一个道理。对吧,就是比如说。我5月1号。5月1号对吧,存了一个数据,哎,他状态呢,是5月1号,我5月2号到了。那这个时候我取5月2号数据来了,我是不是要取状态啊,那取到的状态是空。还是说是5月1号,这两个结果是不是一样的?
04:04
这两个结果它是不是一样的,大家告诉我。它是一样的吧。好。那。大家再来想我刚才说的问题。5月1号登录了。状态里边呢。存着5月1号。啊,想一想啊,我要聊什么事了,对吧,下一次登录是5月17号,他也保留他状态呢,会被修改成5月17号,但是这个中间从二号一直到16号没有登录,但是它状态呢,一直存的是。5月1号。知道我要说什么事了吗?就是大家感觉这样的方式。好吗?就是结果它不会错,但是你有没有发现好像有改进空间啊?
05:00
是不是有改进空间,大家告诉我。对了,清状态啊,因为你看啊,你5月1号我们说了,只要你到了第二天,你状态有昨天的数据根为空。结果是一样的。对吧,你的结果是一样的,好,那么到了5月2号开始,那这个状态这么长时间,我是不是可以不存呢。就是你存一个5月1号,从5月2号开始,你存5月1号跟存,那或者说不存啊,那就是不存嘛,你存的5月1号跟。结果是不是一样的?对吧,这就我们刚才分析出来的,所以呢,我们这个状态它是不是可以考虑,诶过了一天我就给它干什么。
06:02
给它清掉啊。对吧,过了一天我就给它清掉就好了,我没必要一直存着。对吧,因为到了第二天你的数据,你的状态等于那。跟存的是昨天的数据结果是一样的,那我不如不存,我不存呢,我状态是不是会更小啊。对吧,特别像是什么情况呢,有些人就登录一次,最后呢就卸载了,再也没有访问数据了。那如果按照我们现在这个逻辑。我们这个状态里边是不是一直会保留着它的一个状态。对吧,但如果说我们想办法给它清掉呢。哎,他是不是最多得保留一天啊,我们想的,因为我们是日活嘛,就算我们保留数据时间,是不是也保留一天就够了。对吧,啊,最多保留一天就够了。那我们想这个东西应该怎么做呢?
07:01
聊到这儿了,对吧,我们确实要清状态。优化一下相当于做一个优化,对吧,因为要不然的话,你这个数据存的时间状态太大了,不好,对吧,我们想办法把它做一个优化,那怎么做,大家想到什么东西。就是我现在要清这个状态,当然清状态倒简单对吧,直接调就好了。但是应该怎么做呢?好,大家想到了定时器。对吧,呃,那定时器定什么时间点。对吧,数据来了。我要注册一个定时器,在定时器里边呢,去调用颗粒奥对吧?诶大家想法不错啊好,那我们想我们定时器应该定什么时间点呢。
08:06
我们定什么时间点啊,三个同学说这个定时器。哎,定这个零点没问题,就是第二天,假如说你现在是5月17号,那我们就定5月18号的一个什么。零点。对吧,我们就要定这个5月18号的一个零点啊,就是一旦你状态出发了写操作,哎,也就是在这一步的时候,咱们干什么注册定时器对吧,在这后面呢,我们注册个定时器,注册一个第二天。凌晨的定时器。啊,这种大家有没有问题。
09:01
这种。方案。有没有问题?对吧,我们要去注册一个定时器,然后呢,在这个位置对吧,你更新了状态,我们就注册一个定时器,因为状态没动,那我们就不用管,对吧?啊就是往拟写东西了,那我们就。注册这个定时器对吧,然后呢,到第二天凌晨啊,第二天凌晨呢,你得拿着这个时间戳稍微的加工一下吧。是不是那加一天,然后呢,获取他的时间戳,因为在注册定时器的时候,它实际上是一个什么。是一个要未来的时间,对吧,他要的是一个未来的时间啊,注册一个定时器啊,当然这种方案呢可以对吧,用定时器来清空我们的状态,我就最多保留到第二天的凌晨,对吧,我就把它清掉啊,那如果说我们要用定时器的话,现在这个代码就得改,我就不能用filter了,我是不是得用process。对吧,因为你要加电视器,你这里边儿它可写不了电视器。
10:02
对吧。写不了这个定时器,那不行啊,那你就得改代码,那比较麻烦啊,那我们想除了定时器之外。他如果还有什么功能就好了,对吧。就我们想啊,它定时器呢,我们主动的去清理这个内容,那么就状态的一个清空嘛,对吧,你想一想,如果。关于这个状态有什么功能就好了。如果这个状态它有什么功能就好了。对,状态的生命周期就是所谓的TT。对吧,就是你创建状态以后,我就让你自动倒计时,可不可以啊,诶这过期时间对了。就给你当前这个状态一个什么。过期时间是不是就好了?对吧,好,那么这个过去时间,我们如果有的话,真有的话,我们设置多久啊。
11:05
就是如果这个状态真有这个过期时间,我们设置多久比较合适啊。设置一天吧,啊设置一天好。那我们想。24小时一天嘛,我们就对一对吧,好,那我们想一想,如果真有这个功能它。设置一天能不能行呢?啊,24小时减当年时间啊。呃。对,最好是这样,但是我告诉你这个状态里边他做不到这个事儿。啊,他做不到这个事儿。啊,做不到这个事儿,那就简单一点,直接保留一天吧,啊就是呃,林总还有翔总所说的对吧,他说比如说我现在九点登录的。对吧,那我也没必要保留24小时,我就保留什么呢?从第二天凌晨减去这个时间是不是就好了,但是呢,在弗林格状态里边,他做不到这个事情啊,等会儿呢,我们会跟他家说,为什么做不到,因为他写的位置决定的做不到啊好,那我们就假如说,那既然做不到,我们是不是保留一天啊,对吧?好,假如24小时,那我们来看一下保留24小时到底行不行,按照我们的写的逻辑对吧?啊,要不要改或者什么样的,比如说还是同一个m mid啊,M mid我就不写了,肯定是同一个啊。
12:29
我呢在5月16号。九点。这是我的整个的第一条数据。OK吧,他整个第一条数据啊,那么呢,这条数据将会被。保留。对吧,将会被保留且。状态是多少?5月16号。这个没毛病吧,好,那接下来呢,我来了一个这么个数据啊,来了一个什么数据呢,假如说我保留24小时过期啊,他在什么时候过期啊,这个状态他在5月17号。
13:05
九点过去吧。对吧,他在5月17号九点过期,因为我保留24小时嘛,对吧,我们来看这种可不可行啊好呃,那假如说我来了一条数据是5月17号。八点的数据。我来了一个5月17号八点的数据。啊,那我们想啊,我就来这两条数据,我这条数据就先说应不应该保留,就这条数据应不应该保留。对吧,我5月17号。八点的数据来了,他应不应该保留啊。应该保留吧,好,那我问大家,按照我们的逻辑,他能不能保留,他会不会被保留下来?
14:07
啊,刚才大家说的他应该被保留下来,第二个问题,他会不会被保留下来,按照我们所写的逻辑,能不能够被保留下来?很明显是可以的,对吧?啊,那看来24小时呢,目前没有什么大问题,好,那假如说我来的不是八点的数据。啊,第二条数据呢,注意这是第一条啊,这是第二条。我假如说来的不是八点的数据,我来的是什么呢?我来的是十点的数据。他应不应该被保留,就是第二条数据啊,注意看啊,就没有八点那个数据,十点单独来的,对吧,他应不应该被保留,它能不能被保留。
15:01
啊,那告诉我就是单独第二条,就是第一条是16号九点的对吧?呃,第二条数据呢,是5月17号十点的。对吧,第一他应不应该能保留。应不应该要保留对吧?第二个能不能保留,这个答案是肯定的,两个都是肯定的,对吧,都是可以啊都可以,哎,那这样看来没有什么问题对吧?好,那我们继续看。假如说数据是这样来的,他呢。八点来了一条。又来了第三条数据。十点又来了一条,注意看。在八点的时候,按照我们的理解,我们八点是不是能被保留第二条数据刚才说了,但是他的状态会被更新成什么?17号。是不是会被更新嘛,啊每一次保留量要更新,但是呢,他状态在什么时候,5月17号九点。
16:02
过期。对吧,好,那我们想啊。对于这两条数据而言,我们应该保留谁?这一天来了两条吧,那我就只要一条,是不是应该保留八点的数据,十点的不要?对不对。我们要的效果是八点的保留,十点的不要,这是理想的,对吧,这是我们想要的状态。但实际结果呢?但是实际结果呢?你想一下,按照我们的逻辑。八点数据来了,状态不等于钠。诶一比较我是5月17号,你是5月16号没有问题,保留了对吧,且把这个状态更新成这个。17。好,到了九点的时候。这个状态被清空掉了,也就是说九点的时候怎么样状态为那。
17:05
啊,然后十点数据来了,取状态一看,诶,你等那我认为自己要了,也就是说我们所写的代码感觉怎么样,感觉八点跟十点的数据都。保留着,能理解吗?就是我们现在说的这个现象,大家能不能明白。啊,我们要的是不是这种情况呀,我们要只要八点数据,十点不要,但是按照我们所写的,假如说保留24小时对吧,他说八点跟十点都保留了。对吧,诶出现了跟我们,我们就肯定不希望这样,那大家再思考。对吧?呃,刚才有同学像那个明总还有翔总提出来了,他说你这个TTL呢,设置用第二天的凌晨减去当天时间,我设置这么长时间,那这个当然没问题,因为他在凌晨的时候会过期,对吧?但是我告诉他了这个东西不行啊,当然等会儿我们去解释为什么不行,好,那既然这个不行了,那想一想,如果这个TTL它有一个什么功能就好了。
18:17
如果这个TCL它再多一点点什么样的功能就好了。思考一下。哎,陈总说了,说什么叫更新状态的时候也更新过期时间。对吧,像翔总说的延迟对吧,虽然我设置了24小时,但是你这个时候你把状态是不是改了,如果这个时候我重新倒计时,我让他什么人呢?我让他5月18号。八点过期是不是就好了,只要你修改状态,我呢把这个更新,把你的过期时间重置一下是不是就好了。
19:05
能明白这个意思吗?如果有这个功能,咱们是不是就解决了这个问题?能不能听懂,能听懂就扣一啊,就是陈总所说,说更新状态的时候也要更新过期时间,如果他有这个功能。是不是就好了?对吧。好,我要告诉你的是什么呢?TGL第一。在Li里边,它状态可以设置TTL,这是第一点,第二。它也能做到更新状态以后更新过期时间,这两个功能它都有。啊,所以我们才聊这么多,如果他没有这个功能,我告诉你我最早写代码,这我就不写非了,我直接就写process了啊,因为我尽量的去少改这个代码,对吧?好,那他关于这个TT在哪添加呢?在这儿。
20:04
啊,所以大家我不知道大家有没有注意到一个细节啊,我以前写。状态描述器是不是在这里边直接扭。有印象吗?你看这啊。我之前写了一个状态,我直接在你们六的一个匿名对象对吧,而这一次呢,我把这个东西给他干什么拎出来了啊,我不知道大家有没有关注到其三个细节,两个连续的两个类对吧?里边写的东西不一样,因为我们TT是要给这个对象去设置。是要在这个状态描述器上面去设置对吧?好,那我们来看一下,哎,在这啊。加上设置。状态的。TT。啊好,那咱们呢。边叫enable time to leave,所谓的T就是它叫time to leave。
21:07
看见没?TTL缩写time独立还要能活多久对吧?啊,火热时间数啊,那这里边给一个什么呢?他要一个叫呃,要一个什么东西啊,叫t TL conflict,看见没,要一个state t t conflict,好,那你要它,那我们就拗一个叫state t TL conflict。哎,那我们回车发现怎么样,这个类底下报错。那一般是什么原因啊。这个类这个。泪底下,在这个肋底下,就是构造器底下报错。一般是什么问题啊。就是如果说我们你看这个啊,是不是括号报错呀,括号报错什么问题啊。因为没给参数嘛,对吧,那这个它不是括号报错,它是类底下这个构造器底下报错,为什么。
22:07
他为什么在这个构造器底下。对,一般来说是往后的或者私有化的private对吧?啊,那这个呢,一般都会有一个什么。Build。啊,都会有一个build啊好,这个括号保我们看一下他要什么啊,他要一个什么,它有一个time时间,刚才我们说了我们给一天对吧,那就time.days吧,一天。好,CTRL加V得到一个。七点要看那个,诶给他扔进来啊,这个我们完成了第一个功能,就是说保留一天,还有第二个功能说我们要让他在。更新状态的时候重置。过期时间对吧?好,那怎么做呢?在这个位置点叫set update t叫更新的。方式对吧?好,那我们来看一下点进去啊,他要一个叫update type对吧,点进来点进来发现它这个枚举,枚举呢有三个对吧,第一叫disable disable什么呢?Time t dl isable,就是嗯,State'。
23:13
Expel就是说这个不过期。不过期对吧,就disable就状态不过去了,你T白设了对吧,第二个看啊叫on create and write叫什么创建和写。啊,创建和写的时候要去更新对吧?第三个呢,叫on read and write,诶感觉是什么读和写,但是实际上不是啊,它是什么呢?The same as,哎,跟他一样,But also,并且在。状态被读了。也会更新。对吧,状态被读了他也会更新,这个要注意一下,就是说他呢,比他还要更新的更多一点,就是哪怕你被读了也要更新,但是我们没必要,我们只要写更新就行了,对吧,所以呢,咱们用的是什么叫。
24:05
Update on create and right。搞定了。结束了对吧,啊,那把我们刚才所说的。T功能加上去了对吧,同时我们希望他在更新状态的时候,可以更新这个过期时间。也有了。对吧,好,那最后解释。一个问题,就是之前有同学说的,那我们把这个时间设置成。说用第二天凌晨减三天时间,我说了不行,现在我代码写完了,我还要解释这个问题吗?还需要解释为什么不行吗?能明白吗?就是呃,刚才应该是明总跟那个翔总提出来的,对吧,说用这个第二天凌晨的时间减去啊那个时间,那当然最好的减去长时间对吧?啊,你是九点。
25:03
那我前面九个小时我就不算了。对吧,现在能明白为什么不能了吗?明总跟翔总。对吧,当然大家提出那个想法是好的啊,因为大家没学过这个嘛,所以我们想的确实是,那我保留。一直保留到第二天凌晨就好了。对吧。啊。能明白吧,为什么,因为。你在定义这个时间的时候,你接触不到数据。对吧,你要想用那个第二天凌晨减那个时间戳你是不是。得在这写,但不好意思状态的TTL,它是定义在。状态描述器上的。啊,它是定义在状态描述器上的,你在这个位置是拿不到数据里边的时间的,对吧?啊拿不到数据里面时间的跟我们什么呢?跟我们之前所写的这个东西很像。说用JD bc think是不是很像啊,对吧?我们这个circle要用数据来构建,但是我在定义这个circle的时候,他拿不到数据,那这边一样,我们呢,希望这个东西要用数据里面时间来做定义,但是我在定义这个t TL con的时候,拿不到数据的时间。
26:18
对吧,所以我当然说了他不行啊,最后呢,把这个问题给大家收个尾啊,因为我说了要给大家解释对吧,其实这个写完大家有很多同学呢,应该就能明白我之前说的为什么不能,对吧?因为我不是在这儿写,如果在这写就可以。对吧,我用第二天时间减去这个TS就行了,但现在呢,这拿不到数据里边时间了,对吧?啊,所以只能统一定义一天啊就够了,对吧,我们保留一天就好了啊。
我来说两句