#### **1.通过SETNX实现互斥**
客户1试图加锁
~~~
SETNX lock 1
(integer) 1 // 客户端1,加锁成功
~~~
客户2试图加锁,失败
~~~
SETNX lock 1
(integer) 0 // 客户端2,加锁失败
~~~
#### **2.需要释放锁**
如果有客户端进程挂掉,会造成其他客户端无法获取到锁,进而死锁
~~~text
127.0.0.1:6379> DEL lock // 释放锁
(integer) 1
~~~
#### **3.设置锁消亡时间**
设置消亡时间可以避免死锁,但是会出现业务没有完成,锁被强制收回的情况
```
SET lock 1 EX 10 NX # 加锁和消亡时间由Redis保证原子性
```
问题:
> 客户1获得锁,并执行业务处理
> 业务处理时锁过期,锁被强制收回
> 客户二获得锁,并执行业务
> 客户一业务执行完成,释放锁,此时是客户2的锁
解决办法,对自己的锁标识
**4. 锁标识**
上锁时,加上自己的唯一标识(锁=key,标识=value),value唯一即可
~~~
// 锁的VALUE设置为UUID
127.0.0.1:6379> SET lock $uuid EX 20 NX
OK
~~~
解锁时,进行判断
```
// 锁是自己的,才释放
if redis.get("lock") == $uuid
redis.del("lock")
```
由于get和del不是原子操作,又会产生线程安全问题(概率很小)
> 首先,客户1判断是自己的锁,此时锁被强制收回
> 客户2获取锁
> 客户一继续删除,又删错了
解决办法,通过lua脚本让get和del指令具有原子性
#### **5.锁存活时间问题**
业务没有执行完成,锁被强制收回,如何控制好锁消亡时间,redisson有看门狗技术,实时监控业务处理
- springcloud
- springcloud的作用
- springboot服务提供者和消费者
- Eureka
- ribbon
- Feign
- feign在微服务中的使用
- feign充当http请求工具
- Hystrix 熔断器
- Zuul 路由网关
- Spring Cloud Config 分布式配置中心
- config介绍与配置
- Spring Cloud Config 配置实战
- Spring Cloud Bus
- gateway
- 概念讲解
- 实例
- GateWay
- 统一日志追踪
- 分布式锁
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安装
- 1.2 特性
- 1.3 实例
- 1. 整合nacos服务发现
- 2. 整合nacos配置功能
- 1.4 生产部署方案
- 环境隔离
- 原理讲解
- 1. 服务发现
- 2. sentinel
- 3. Seata事务
- CAP理论
- 3.1 安装
- 分布式协议
- 4.熔断和降级
- springcloud与alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服务框架付费
- SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志清理
- 统一日志中心
- docker安装部署
- 安装部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定时清理数据
- index Lifecycle Management
- 没数据排查思路
- ELK自身组件监控
- 多租户方案
- 慢查询sql
- 日志审计
- 开发
- 登录认证
- 链路追踪
- elk
- Filebeat
- Filebeat基础
- Filebeat安装部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安装
- rpm安装
- docker安装Logstash
- grok调试
- Grok语法调试
- Grok常用表达式
- 配置中常见判断
- filter提取器
- elasticsearch
- 安装
- rpm安装
- docker安装es
- 使用
- 概念
- 基础
- 中文分词
- 统计
- 排序
- 倒排与正排索引
- 自定义dynamic
- 练习
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- kibana
- 安装
- docker安装
- rpm安装
- 整合
- 收集日志
- 慢sql
- 日志审计s
- 云
- 分布式架构
- 分布式锁
- Redis实现
- redisson
- 熔断和降级