黑马点评面试知识总结四-一人一单(集群环境,分布式锁)

接着上一篇继续,上一篇末尾提到了集群环境下锁实效的问题,这一章节主要就是学习一下分布式锁的使用。

首先抛出概念:

分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。

分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路。

分布式锁有需要满足很多条件,比如说可见性,互斥,高可用,高性能,安全性等等。这里不加以阐述。直接上干货

在上一篇的单机环境中写的代码并没有用到redis,这一篇将主要讲解redis,干货满满。上图就是常见的分布式锁,本项目主要就是学redis的,所以咱就用redis。

利用redis实现分布式锁的思路很大部分都是很redis本身的特性有关

  • 获取锁:

    • 互斥:确保只能有一个线程获取锁

    • 非阻塞:尝试一次,成功返回true,失败返回false

  • 释放锁:

    • 手动释放

    • 超时释放:获取锁时添加一个超时时间

核心思路:

我们利用redis 的setNx 方法,当有多个线程进入时,我们就利用该方法,第一个线程进入时,redis 中就有这个key 了,返回了1,如果结果是1,则表示他抢到了锁,那么他去执行业务,然后再删除锁,退出锁逻辑,没有抢到锁的哥们,等待一定时间后重试即可。

项目又设计了一个实现类simpleRedisLock和接口Ilock,其中有两个方法获取锁和释放锁。

基础代码

(其中很多变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值