跟换图片源

This commit is contained in:
罗祥
2020-05-25 11:18:05 +08:00
parent f039b42ea7
commit 57ce004275
34 changed files with 234 additions and 234 deletions

View File

@@ -73,7 +73,7 @@ jedis.set("lockKey", "lockValue", SetParams.setParams().nx().ex(3));
此时一条命令就可以完成值和超时时间的设置,并且因为只有一条命令,因此其原子性也得到了保证。但因为引入了超时时间来避免死锁,同时也引出了其它两个问题:
<div align="center"> <img src="../pictures/redis_分布式锁原理.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/redis_分布式锁原理.png"/> </div>
+ **问题一**:当业务处理的时间超过过期时间后(图中进程 A由于锁已经被释放此时其他进程就可以获得该锁图中进程 B这意味着有两个进程A 和 B同时进入了临界区此时分布式锁就失效了
@@ -206,7 +206,7 @@ redissonClient.shutdown();
此时对应在 Redis 中的数据结构如下:
<div align="center"> <img src="../pictures/redis_分布式锁_cli1.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/redis_分布式锁_cli1.png"/> </div>
可以看到 key 就是代码中设置的锁名,而 value 值的类型是 hash其中键 `9280e909-c86b-43ec-b11d-6e5a7745e2e9:13` 的格式为 `UUID + 线程ID` ;键对应的值为 1代表加锁的次数。之所以要采用 hash 这种格式,主要是因为 Redisson 创建的锁是具有重入性的,即你可以多次进行加锁:
@@ -218,7 +218,7 @@ boolean isLock2 = lock.tryLock(0, 30, TimeUnit.SECONDS);
此时对应的值就会变成 2代表加了两次锁
<div align="center"> <img src="../pictures/redis_分布式锁_cli2.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/redis_分布式锁_cli2.png"/> </div>
当然和其他重入锁一样,需要保证解锁的次数和加锁的次数一样,才能完全解锁:
@@ -284,7 +284,7 @@ redissonClient03.shutdown();
此时每个 Redis 实例上锁的情况如下:
<div align="center"> <img src="../pictures/redis_分布式锁_cli3.png"/> </div>
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/redis_分布式锁_cli3.png"/> </div>
可以看到每个实例上都获得了锁。