图解分布式锁实现方式原理视频教程(zk+redis)
一、分布式锁的适用场景介绍
首先,分布式锁的应用条件前提必须得是分布式的系统,如果是单体项目下直接用synchronized锁就可以了,压根也用不到分布式锁,因此,我们假定的条件必须有多台机器部署多个节点。其次,分布式锁最常见的应用场景应该就是下订单减库存的库存超卖问题了。
比如我有两台机器分别提交订单进行购买商品,然后后台肯定会调用库存的服务来削减库存,就比如read的缓存库存数量是1,第一个节点发现redis的库存中是一,然后就会先到mysql数据库削减库存,然后再来改redis中的缓存数为0,但是在改的过程中,另一个节点也过来了,也发现redis中的缓存还是1,第一个节点还没来得及修改,此时它同样也会去mysql数据库中改改库存,这样就会导致超卖的问题了,这就是最常见的库存超卖问题,可以使用分布式锁完美地解决。
二、分布式锁的三种实现方式
业界实现分布式锁总共有三种情况,分别是mysql数据库端实现、Redis的redisson框架和自带的nx锁实现以及zoo keeper实现,其中redis和zookeeper实现分布式锁,我们在文章里就不用多做介绍了,大家可以看本文提供的视频,里面会有详细的讲解和案例讲解,在这里我们只说一下数据库端的分布式锁如何实现。
数据库端的实现方式无非就是怕两个节点来同时修改一条数据而导致有脏数据的产生,因此常见的一种方式应该就是无锁状态下的锁实现,就比如我们可以设置一个版本号,每次有节点来修改数据之前,先将这条数据查询出来,然后拿着查询出的版本号再来修改这条数据,如果版本号没有发生改变,就可以修改成功,如果版本号被另一个节点修改过了,它的版本号就会加一,跟我们拿到的版本号就不一样了,此时就会修改失败,此时应该需要再次重新查询出最新的版本号,再次拿着最新的版本号去数据库更新数据,这就是mysql端的分布式锁的实现方式,但是它也有缺点,缺点就是性能比redis的要慢,其次,在高并发的情况下,还会有锁表和经常操作失败的风险。
扩展阅读:
三、zk+redis实现图解分布式锁视频教程课程信息
1、课程大小:2.87GB
2、课程课时:共计23课时
3、播放格式:(mp4视频格式)百度云网盘在线播放、下载视频播放器播放、不加密
4、课程板块:zookeeper分布式锁+Redis分布式锁
5、课件说明:教程课程涵盖素材、代码、笔记资料
以下是分布式锁实现方式原理视频教程具体课程大纲:
1)由一个电商库存中的超卖问题来引出锁的应用
2)库存超卖现象问题演示与分析
3)剖析能够解决超卖的几种方案与思路
4)单体架构下可以使用synchronized的锁来解决库存的超卖问题
5)单体架构下使用效率更高的ReentrantLock锁来解决库存超卖的现象
6)由以上两个案例引出单体架构下的锁带来的性能问题和架构问题
7)由单体架构的局限性引出分布式锁
8)分布式锁的应用方式与原理剖析
9)使用redis自带的分布式锁来解决库存超卖
10)zk的下载安装应用启动
11)剖析zookeeper底层的分布式锁的原理
12)使用zookeeper编写代码完成超卖解决问题
13)使用zk的另外一种分布式锁解决方案
14)应用redisson框架来解决分布式锁的问题
15)分别使用spring框架和springboot框架整合redisson框架
16)多种分布式锁实现方式的优劣对比
图一:zk+redis多种方式实现分布式锁视屏教程详情
扩展阅读: