00:00
刚才我们用代码实现了所得最基本的应用场景,在这种场景下,我们的共享资源在服务内部。此时呢,我们使用GVM锁就可以解决并发性的问题。但这种场景在实际开发中其实很少出现,因为我们的共享资源往往在服务外部,例如我们的库存信息咱通常会保存到数据库里面,如果并发量不是很高的情况下,我们可以选择从关系型数据库里面直接去减库存,比如说呢蚂蚁。如果并发量很高,比如在秒杀场景下,我们可能会先把库存信息反映到里面。然后呢,我们先从Y1减钩子。不管是哪种场景,我们都需要保证现场安全。那么,如何保证行车安全呢?那么比如说MYSQL数据库的话,我们依然可以选择使用代码级别的这种锁机制,比如说呢GVM给他提供的锁机。
01:01
我们也可以使用MYSQ本身的一些锁机制,比如说MYSQ呢,给咱提供了悲观锁以及乐观锁的一些算法。啊,那么如果是release数据库的话,那相对来说呢,比较麻烦了,因为呢,它本身没有完善的锁机制。好,那么这里呢,咱们就一一演示一下,那么这些所分别呢?在实际工作中该如何去使用它们?然后呢,又会带来什么样的问题?又该又该如何去解决这些问题?最终呢,我们会引出我们的分布式所。那么首先呢,咱这里呢,减库存啊,我们先从my circle里面来减库存啊。那么咱以MYSQ为例,现在演示一下。那么这个要求呢,我们就要有MYSQL对应的数据库,以及呢库存表啊。好,我们打开我们的MYSQL客户端,那我这里呢,有一个空的MYSQL数据库。
02:03
那么在这里呢,我先去创建一个新的库啊,这个库名呢,我们就命为distri beauty beauty block。有了这个数据库之后啊,我们在这个数据库里面,那就新建一张表。表呢,咱不需要搞得很复杂,我们就搞几个字段啊,首先是ID是big。那么不为空啊,是主电让数据库自增。那么再添加一个栏位啊,来一个pro code,这是商品编号长度呢20。这是什么东西呢?啊,商品编号啊,是我们商品的唯一标识啊。那么咱将来去在店商里面下单的时候,那么你肯定是从商品页里下单的。那我要去买这个东西,肯定要根据这个商品的编号来查库存,进而呢,再减对应的库存记录就可以了。
03:03
那么上编号呢,肯定是必须的啊,然后呢,不宜空。然后我们再来去添加一个字段,这是warhouse这个字段,那么这个字段呢,是仓库的意思啊。那么比如说京东这种大型电商,那么它通常呢,有多个仓库,比如说你在北京。你查看库存可能会显示无货。但你切换到上海的话,可能会显示有货了。好,那我们再来去啊,设置一下部位空。最后呢,再来一个字段,是count字段,它是我们的库存数量,不为空,要保存为一张表。这张表呢,它就命名为DB talk这张表。那表有了之后呀,我们再给表呢,添加一条记录。首先把这个位置呢改成20。然后呢,我们保存一下,打开这张表,给这张表呢,我们来新增一条库存记录,我们来一个1001商品,然后在北京仓有5000件库存,好来保存一下。
04:11
那么这样呢,我们就就有一条库存信息了,那么接下来呢,我们要通过我们的代码来操作咱们的库存。我们来去改造一下之前的担保工程。那么此时呢,我们要连上咱的MYSQL数据库,就需要引入MYSQL驱动来引入一下。引入好之后呢,我们就需要19层框架,那我们这里选择使用的是my balance框架。那么如果我直接去使用my body的话,那么还要写SQ语句就很麻烦,所以呢,我们选择使用my plus插件。那么简称MP塔尖。那我们这里呢,由于是频的工程,所以我们选择使用my be plus的启动器。那么他顺便也会把MY依赖给我们传递进来,这呢,咱就不用再单独引入MY了。
05:01
然后接下来呢,我们来去配置数据源,咱至少要配置四大参数,一个是驱动啊,把这个依赖呢导入进来。那导入好之后呀,我们这里呢,就应该有我们的驱动类了啊,来一个MYQ驱动。然后URL,我们要配置数据源地址,我是JDBC冒号my circle双斜杠,我在虚拟机里面哈,来个幺七二点幺六点幺幺六点一百,然后3306。这里呢,一定要写成你自己的蚂蚁SQ地址千万不要跟我一模一样。那么经常有同学呢,给我反馈说,老师,我写的跟你一模一样,怎么连不上啊?那我一看呢,就是因为这个地址都跟我一模一样了,所以呢,一定要写成你自己的数据库地址。那么咱的数据库呢,叫disted lock,然后use name是root password呢,也是root。
06:00
啊,那么这呢,配置呢,咱就配置好啊,能够连上我们的数据库了哈,像一些个性化参数啊,还有一些其他的数据源配置信息,我这呢全部都省略了,我能够连上就可以了。因为呢,我们将来呢,是横向的这种性能比较啊,OK,那我们来去看一下我们这个实体类。那么实体类呢,将当对应到我们的库存表,我们就需要来一个table name来指定一下咱们对应的表啊,是DB stop这张表。然后呢,我们再去添加几个字段,那么这个字段咱就不需要了,来一个private long ID字段,再来private,我们还需要product。扣的这个字段,那我们这里呢,使用的是拖峰啊。然后呢,Private,我们还需要wehouse仓库,以及呢,咱们的库存数量来一个count,好,那么这四个字段呢,我们就有了哈,那么有了这四个字段之后呢,咱们接下来啊。
07:07
需要去有对应的map接口啊。那这个map接口我们可以放在根目录下来创建一个新的接口,放在map这个包下面,我们就命名为map。然后让他去继承face map,这个呢是my plus给我们提供的一个通用map。它里面提供了单表的COD方法,那将来单表操作咱几乎呢,不用写什么词汇语句了。来一个发型。那么写好micro接口之后啊,那我们还得要在启动类上再去加一个注解,叫micro ten。啊,来一个接口扫描。那么这呢包路径啊,咱可以呢,把路径给它拷贝过来。然后呢,放在我们maps看这里面去。好,然后呢,我们接下来呀,就可以在咱的service里面来去操作my circle数据库里面的共享资源了。
08:06
那么之前呢,我们操作的是内部的这个共享资源啊,把它给注射掉,那么注掉之后呢,我们需要去引入stock mapto map。那我们接下来呢,就需要改造我们的代码了,首先呢,我们先不加锁啊,咱们给它注释掉。啊,项目代码结构啊,还保留着啊,因为后续呢,它还是需要加锁啊,你们再给它解开就可以了。那中间这个操作,我们之前是操作自己的内部的共享资源。那么现在呢,咱要通过talk map先去查库存信息,咱你来个one,因为我就只有一条库存,我使用哪个方法都可以,那为了简化呢,我们就使用one了,那后续呢,我们可能会有多条库存信息啊。那再点上E,它肯定是根据商品编号来查库存,来个product code,然后呢,我们就写死了,来个1001这个产品。
09:07
我查1001商品的库存信息,那么返回的呢,是套对象。然后呢,咱这个泛型啊,也需要给它填进去啊,那么这样呢,他就不会报错了。我们接下来呢,就要去判断咱的库存信息是否为空了,如果你不为空,并且库存数量表大于零,我才能去减库存,来一个stock点上get count大于零。然后呢,我们可以给这个库存信息啊,来去更新一下库存数量。来个stock,点上get count每访问一次,我就减一键库存。好,那么剪好之后呢,咱们要重新写入到数据库,点上update by ID,把stock放进去。好,那么放好之后呀,咱代码呢,就已经写好了,写好之后呢,我们来去重新启动一下我们这个工程。
10:02
啊,启动呢,应该问题不大啊,咱们这点自信呢,应该还是有的。嗯。一定要提。
我来说两句