接着上一篇继续,上一篇末尾提到了集群环境下锁实效的问题,这一章节主要就是学习一下分布式锁的使用。
首先抛出概念:
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。
分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路。
分布式锁有需要满足很多条件,比如说可见性,互斥,高可用,高性能,安全性等等。这里不加以阐述。直接上干货

在上一篇的单机环境中写的代码并没有用到redis,这一篇将主要讲解redis,干货满满。上图就是常见的分布式锁,本项目主要就是学redis的,所以咱就用redis。
利用redis实现分布式锁的思路很大部分都是很redis本身的特性有关
-
获取锁:
-
互斥:确保只能有一个线程获取锁
-
非阻塞:尝试一次,成功返回true,失败返回false
-
-
释放锁:
-
手动释放
-
超时释放:获取锁时添加一个超时时间
-
核心思路:
我们利用redis 的setNx 方法,当有多个线程进入时,我们就利用该方法,第一个线程进入时,redis 中就有这个key 了,返回了1,如果结果是1,则表示他抢到了锁,那么他去执行业务,然后再删除锁,退出锁逻辑,没有抢到锁的哥们,等待一定时间后重试即可。
项目又设计了一个实现类simpleRedisLock和接口Ilock,其中有两个方法获取锁和释放锁。
基础代码
(其中很多变

&spm=1001.2101.3001.5002&articleId=145877438&d=1&t=3&u=2e4d69db3fdf4975a84d17436e8dad99)
3921

被折叠的 条评论
为什么被折叠?



