00:00
前面我们查出了我们最近三天需要上架的这些秒杀活动,那么现在呢,不仅要查出这些活动,我们应该再来查出我们这些活动里边需要上架的商品,那么现在就来写一个判断,如果我们这个活动不等于空,我们来查出来了,并且呢,它的这个size是我们这个大于零的,那么就应该把它的整个商品呢也查出来,顺便呢一起返回,那么现在呢,就来把它来做一个便利list,点一个string来进行一个便利,便利呢每一个我们把每一个里边呢,给它都来设置上我们的这个商品,比如呢,我们现在便利的每一个都是一个session的实体类,最终呢,我们给它来返回,返回一个什么,我们就给这个session edit里边,我们现在来添加上一个属性,这个属性里边是一个list,那这个list里边,那就是我们这个商品所有关联的,我们这个活动所有关联的商品,那second kill,我们这有一个SQ的这个relation。
01:00
这个SQ关联的这个实体类,那就是relations nity,我们就叫relation sqs,就是说我们这个活动关联的所有商品,由于这不是一个数据库字段,所以我们一定要使用我们这个注解叫table field来标注一下exist,我们来说这个在数据库不存在的,我就是来做一个临时封装,所以接下来呢,我们还是来返回这个session,只不过呢,每一个session我们现在呢,要给它重新再来设置上他们的这个所关联的所有商品,那么这个session呢,我们就来调用一个方法叫点一个set set我们的relation sqs,那这个relation sqs我们就来查一下,首先我们得到session,点一个get我们的ID,这是我们当前活动的ID,那得到这个当前活动ID以后呢,好,我们先把这个ID,我们让它返回。那得到这个ID以后,我们现在要查我们这个关联表,那就是relation,那这个按照这个活动ID,它关联了哪些商品,所以我们现在呢,就是来按照这个来进行查询,那就直接来调用我们的其他service s second q,我们现在呢有一个SQ relation的service,好,我们现在把这个relation service拿过来,拿过来我们来调用它的一个查询方法。第二一个我们现在查询,我们就来写一个list,我们还是按照条件有一个cor upper,那这个条件呢,我们现在要查的是second kill SQ relation entity,它的这个条件呢,应该是依靠依靠什么?我们按照这个ID,我们的活动ID promotion ID,好,Session的这个promotion ID,然后呢,我们来传入我们的这个ID,那相当于查这个活动所关联的我们所有需要秒杀的商品,好,我们最终呢,得到我们这个商品的集合来。
02:54
得到这个集合以后呢,把这个所有商品给这里边一设置,最终再来返回我们的这个整个活动,那么最终呢,就是来返回我们这个,好,我们现在来写一个return一个它,Return一个它,那返回的是一个它,否则呢,我们就直接给它返回一个呢,好现在呢,我们就找到了所有的秒杀活动,以及这些活动所关联的所有商品,那最终呢,我们这个方法调用完了以后,那们这个接口写完了以后,就是要提供给我们这个秒杀服务来进行调用的秒杀服务的这一块份,那我们就来把这个接口的引用我们拿过来,那在这儿呢,就来获取一下。
03:37
那直接把这一块的签名复制过来,CC来到我们的phone service里边,C位public呢,我就不要了,那现在我们要用的整个效果,那整个的这一块的路径,我们把它复制过来,CTRLC。好,我们复制过来,我们获取我们最近三天的所有秒杀活动,而秒杀活动我们返回过来的这个数据,人家给我们返回的这个,我们再来封装一下,我们在VO里边们就叫second kill sessions sessions,然后呢,With,我们这个SQS带了我们这个SQ数据的,好来写一个an data这个数据呢,那就是人家给我们返回什么,我们就照着封装什么,由如人家给我们返回的这个呢,是一个来到看服务里边是一个改装了的这个实体类对象,把这个实体类对象他们有什么,我们就来拿什么就行了,来到这一块,这一块呢,我们首先拿到这一块最基本的信息。
04:40
啊,这个呢,我们复制过来这秒杀活动的信息,它的创建时间,启用状态,结束时间,开始时间,场次名字,把这个拿来以后呢,接下来还有我们这个每一个SQ信息,那这个SQ的相当于关联数据,我们给这呢,还得专门来建立一个VO,好,我们就叫second SQ second。
05:03
Q,我们的SQSQ的这个信息VO,我们把这个VO呢也来准备过来一个data,人家在这呢封装的这个VO,这里边的所有数据能照样呢,全部复制过来,CTRLC来到我们的这个VO里边,那然后我们的这个组合那就应该是这样子的,我们的with sqs里边,那就有一个list类型的这个VO,那现在呢,叫second kill这个。SQVO,好,我们把这个VO呢拿来,我们这个属性名一定要一样,我们在这个session n里边,它的属性名叫relation sqs,因为我们要对应封装,所以它也叫relation sqs,那得到这个以后,那接下来我们进行继续调用,来到我们的这个份远程调用里边,来看一下我们的份远程调用,我们返回的这个对象呢,我们已经能照着封装了,那就是这个类型来到我们的service里边,那先第一个扫描我们最近三天需要的秒杀活动,那现在呢,远程服务已经准备好了,那就carbon service拿到这个远程服务and一个owa来调用它的这个方法,得到我们这个最近三天的活动,它这个方法呢是这样,然后呢,我们得到了整个R对象来判断一下,如果R对象这session点一个get code,首先get code等等零,那就是一切都是成功的状态,那现在呢,就来上架上架咱们这个上。
06:33
那么这个上架商品信息呢?我们现在先来得到所有商品,从session里边我们直接来get data,你有一个type reference,我们现在来指定封装的这个信息,我们现在专门来准备了一个VO,那就是这个session with sqs,这个VO。把所有返回来的数据,那就封装成我们这个指定的VO,好,这是我们所有的session data我们这个数据,那拿到这个数据以后呢,们就来进行处理,那我们整个的处理逻辑,那其实就是将我们这些上架的商品数据来缓存到我们这个RA里边就行了,我们接下来呢,要操作RA,我们先来注入我们的string red tableilet,这都是我们spring boot为我们准备好了,好,我们现在来操作第一个,首先来看我们的流程,首先呢,第一个将我们最新秒杀商品的这些信息,我们先保存到red里边,保存商品信息呢,分为两个部分,第一个保存我们活动的信息,在red里边先保存,那最近三天都有哪些活动方便我们进行检查,那保存活动用的key呢,就是它的开始时间和结束时间,每一个活动呢,有一个开始和结束时间,那这样呢,我们就判断当前时间是哪个范围内的,这个时间,如果是这个范围内的时间,那说明他能参加们这个。
07:52
活动,所以呢,我们K就是一个活动的开始和结束时间,那Y6值,Y6值呢,不是我们这个活动的详细信息,而是我们当前这个活动它里边所有关联的所有商品,那我们这个活动要参与的所有商品,那这个活动的信息没有啥说的,主要就是这个开始结束时间,那包括呢,我们这一块有了以后,我们按照一个活动能查出它的所有关联的商品,相当于一个活动时间查出商品,那商品的详细信息呢,我们再来做一个缓存,所以我们现在要缓存两个数据,那我们就在这来标注一下,那要缓存的两个数据,第一个呢是缓存活动信息,第二个是缓存活动的商品信息,活动的关联商品信息。好,那现在来准备上两个方法,那第一个我们就来写一个private,我们就叫save save,我们的session。
08:50
好,保存我们的这个活动信息,Session信息,那我们来还是传入这个我们指定的这个数据就行了,Session data。
09:00
能找到这个数据,所以我们希望调的第一个方法,你就给我保存这个活动信息,Session data我都交给你,第二个呢,是保存我们活动相关的商品信息,Private y好,我们就叫save,我们的session sqo sqo好,那现在呢,第二个方法就是保存活动的商品信息,把这个呢直接复制过来。我们在这呢,再来调用我们第二个方法save,我们session的SQ enforce,我们保存的这个活动商品信息还是传data,好,那先来做第一个保存活动信息,能们拿到所有的活动,由于这个活动呢,我们是一个list,而不是我们指定的这个样子,我返回的是一个list,所以我们在这来写好们要封装的呢,是一个list类型的。com,好,我们泛型呢在这来指定好,指定好以后呢,我们最终返回到这个结果里边,那也一样,我们把这个结果呢重新来提取一下,好,那么结果呢就是它我们最终传的就是这个,我们将方法的签名也改一下,我们是所有活动牵扯到的所有商品,好,现在呢,先来保存活动信息,Sessions点一个stream,我们就来进行一个便利,我们呢,直接使用这个for each,我们可以来进行一个遍历,好for each呢,那就是当前这个session信息。
10:22
把当前的这个session信息拿来,我们来干上一件事情,那么现在呢,不应该叫sessions,我们它叫SESSION1,好,那我们叫session,那么现在拿到这个当前的活动信息,首先这个活动呢,我们现在关心的是一个开始时间,Start time,好,这是一个开始时间,还有一个结束时间,把这个start time放在这,然后还有一个session的结束时间,点一个get一个end time们市呢,将这个东西我们来作为K要保存到release里边,好这个结束时间,当然我们想要保存呢,把这两个时间我们可以直接作为一个long值来进行保存,所以他点一个get time,这是一个long值,然后呢,包括这个也一样,我们呢都把它们转为一个浪值,那么后来呢,还要做一个时间比较,那这个比较的话呢,这个long值最方便,好,那么现在来准备一个long值,那么这个时间呢,就是它的点一个get time,那我么这个也样。
11:23
点一个get time。好,我们准备了两个时间,把这两个时间呢,我们来拼成一个red里边的K的这个串,这个串呢,那就是我们的开始时间CTRLC,然后呢,加上一个下划线,我们的结束时间,那这就是我们这个当前活动的这个K,然后它的所有的Y流值,那就是把它里边所有的这个活动我们拿过来就行了,这有一个关联的所有的商品ID,然后呢,把商品ID里边的所有ID我们一收集,点一个map来做一个映射,那现在呢,就来收集的是我们的SQID,所以我们看每一个里边的有SQID,我们直接呢来给它collect to list,来写一个to list,好,那现在呢,将我们里边的所有商品ID来转过来,这个拿过来,把这个商品ID呢拿过来,那拿过来以后,那我们现在就要把它们来做一个保存。
12:23
那我们就个保存呢,我们就来调用我们的ready templ点一个,那这个保存用的数据,我们就来写一个options for list或者我们的这个value都行,那我们就来for list for list,我们来调用一个保存方法,我们来给里边这个保存,我们这呢直接有一个叫left push,我们可以来给它从左边往里边放一整个集合,按照我们这个K,那这个K呢,那现在我们就按照约定们的约定,我们所有的活动信息是SQ,我们的second kill加上sessions,把这个前缀我们直接拿过来private,我们的final string,那这个string呢,那就是我们的sessions sessions,我们的prefix,我们的活动要用的整个前缀,Sessions,我们叫catch,活动的缓存前缀,那就叫SQ sessions,然后冒号,冒号呢加上我们要拼的这个K,好,那想要保存,那就是我们的这个。
13:24
对,再来加上我们的这个K,那么就直接来一加就行了,好,它两个呢,来直接一加,一加以后呢,我们得到这个K,把这个K的数据已保存,我们要存的是我们的collect,好,但是呢,这一块大家注意,比如我们现在用的这个red temp们是string类型的,所以它的这两个泛型都是string string,那们现在传的这个值的集合,它是一个浪类型,所以呢,其实是不兼容的,那么就在这儿来收集的时候,我们来重新改一下,那么这个map呢,那就是来映射我当前的这个数据,那就叫item,把这个数据呢,们现在要返回成一个it点一个get SQ ID,我们把它的这个ID呢,做成一个to string来做一个返回,好,我们现在呢,就来把这个方法抽取过来,那最终返回一个string的集合,那这一块呢就没问题了,好,那现在呢,将所有的数据我们都放到了red里边,这是我们保存了当前活动的。
14:24
信息,每一个活动的信息呢,都在reddi里边缓存了,缓存活动信息,那然后呢,将来我们要将每一个活动里边所关联的这些商品的信息,那同时呢也要缓存起来,那么还是一样来拿到所有的这个活动,活动呢来进行stream,来一个for each,那们现在呢,来便利我们当前的这个活动,好,这个活动里边呢,我们现在拿到他们的商品信息,每一个活动里边那都有它的当前商品,来SQS这些商品呢,我们也要缓存进去,同样stream点一个for each,那现在呢就是SQ,那我们这个SKU数据我们来准备好了以后,那接下来就是来缓存我们这个商品,那这个商品信息按照要求呢,我们是这样子的商品呢,是来作为一个哈希来进行缓存,所以我们再来缓存之前,我们可以来先准备一个哈希操作的结构,我们这个准备我们这个哈希操作。
15:24
这个哈希操作呢,我们直接可以ready termt,点一个叫B的来绑定一个哈希操作,按照这个K,这个K里边的值呢,都是一些哈希值,那么这个K的要求是这样子的。那么K呢,就叫second k,我们的SQS,这就是我们约定的K,那么把这个K呢,也放到我们的这个常量这一边,我们的final string,我们就叫SKUQ,我们的这个商品的秒杀,这个缓存用的我们的prefix前缀,那这个前缀呢,你现在约定是这个模样的。
16:01
然后我们来把它来进行一个绑定操作,要不然我们每次都来获取这个哈希操作挺麻烦的,好,我们现在绑定了一个哈希操作,我们这个哈希操作呢,得到以后,接下来我们想要保存什么KV,我们就直接来保存就行了,OS点一个。Put,我们来写一个KV,那K呢,那就是商品的ID,我们直接拿到它来作为这个要保存的K来get ID,这商品的ID,那V呢,那就是我们来拿到它,这就是我们的整个商品,我们直接把它来进行一个保存,当然我们说这个为了兼容性好,期间我们可以把整个商品呢做成一个杰森来进行保存,所以来写一个叫杰森。点一个to Jason string,那将我们要保存的商品,我们来做成一个Jason字符串来存到release里边,好,我们最终保存的就是它,但问题就是我们只保存我们这个需要上架的这些小商品,还不够们按照要求呢,我们商品的基本信息我们是有,我们来看一下每一个商品呢,有它的这个基本的秒杀数据信息。
17:11
我们给里边保存,但是我们给里边我们还要求保存我们当前SQ的详细信息。因为特别是我们来购买商品下订单的时候,我们有可能还需要这个SKU的详细信息,那为了任何时间我们获取这个SKU的详细信息我们都方便,我们就来专门准备一个to数据,那就是给red里边保存用的,这个to我们就叫second k s k,我们的red。To们给red里边保存要用的这个数据,数据呢应该是这样子的,首先我们所有的这个秒杀的这个商品详细信息,这是必须有的,那么就直接把这个呢复制过来。来到我们保存的这一块,由于我们呢,现在操作的这个里边SQ的这些数据,好,我们把这些数据呢,先拿过来,这是我们当前SQ的一些基本信息,然后呢,我们再来保存一些信息。
18:10
比如我们这个SKU的详细信息,当前SKU的价格是多少等等,当然我们这儿呢,有秒杀价格,秒杀按照秒杀价格,但是我们SQ的这个数据库的详细数据,那应该是在这,我们去PMS。这个里边。我们可以在这呢查出SKU的这个详细信息,它的SQ的名字等等。因为这个东西的话,大家要想我们在页面,我们页面呢,只要商品一上架,我们在这儿就要展示这些商品,商品的名字是什么,价格是什么,图片是什么,我们每次都要把这些商品去我们商品服务来查,那就挺麻烦的,所以呢,我们现在呢,把这些缓存的数据,这些数据呢,我们要缓存起来,那么现在呢,就希望有一个商品的基本信息,那这个基本信息呢,就来专门来准备一个基本信息,那商品服务里边,我们让他远程返回我们这个商品的基本信息,这个基本信息的实体类,我们直接拿到这个商品基本信息的这个实体类,好,那就是这一块数据,我们让他呢,直接来返回CTRLC来准备。
19:21
远程呢,返回这么一个数据,把这个数据的返回呢,我们还是来放到我们的second k这个VO里边,我们就叫SKU info这个VO这个呢将是远程的商品服务给我们返回到当前SQ的基本信息点一个at data,所以我们最终希望我们给reddi里边保存的除了有他秒杀的这些信息,还有它的这个基本信息。比如我们现在呢,叫SQ info的这个view,我们就叫SQ info,好,那就是有这些数据,我们给red里边来进行保存,还是来到我们这一块,我们来看给reddi里边缓存的时候不能直接过来了,那缓存的三个部分,SKU的基本数据,这个基本数据呢,我们要在页面来查起来,方便来进行展示。接下来第二部分SKU的秒杀信息,因为这个秒杀就是包含当前squ的秒杀价格,以及它限制的这些数量,那就是在秒杀这一块的信息,所以我们把这两个呢,我们也要保存起来,额外的我们还说我们这一块呢,还引入了一个叫随机码,每一个商品我们想要秒杀这个商品呢,有一个随机码,随机码的作用我们后来再说,我们先把这两个基本的内容,我们先来放上来SQ的基本信息,我们又得查商品服务了,我们现在呢,再来准备我们这个商品服务,而这个秒杀信息我们可以来直接对拷过来。
20:47
好,我们现在来准备一个red要用的这个to second q,那这个red to数据,这个to数据呢,我们来准备好,那以后呢,就是把它写到red里边的来杰森,点一个to杰森string,好,这个to杰森string,我们把这个杰森字符串,就是这个to来准备好一个杰森字符串,这个杰森字符串呢,我们就把它来写到red里边当前商秒杀的商品的详细信息,这详细信息里边有基本数据,有它的秒杀数据,那这个秒杀数据呢,我们就先来对拷过来being us点一个copy properties数据源,我们从这个里边那样秒杀的这个VO的数据里边,拷贝到我们这个to里边,那属性名呢,都是一模一样的,那剩下的这两个呢,下节课再来进行准备。
我来说两句