From a79d5c128a9b9a7b348b93c1bb98b0ae876f868f Mon Sep 17 00:00:00 2001 From: guide Date: Thu, 1 Sep 2022 22:07:55 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]Redisson=20=E7=9C=8B=E9=97=A8?= =?UTF-8?q?=E7=8B=97=E8=87=AA=E5=8A=A8=E7=BB=AD=E6=9C=9F=E5=9B=BE=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/distributed-system/distributed-lock.md | 6 ++++-- ...stributed-lock-redisson-renew-expiration.png | Bin 0 -> 28291 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/distributed-system/images/distributed-lock/distributed-lock-redisson-renew-expiration.png diff --git a/docs/distributed-system/distributed-lock.md b/docs/distributed-system/distributed-lock.md index 3fd618dc..bd935906 100644 --- a/docs/distributed-system/distributed-lock.md +++ b/docs/distributed-system/distributed-lock.md @@ -67,7 +67,7 @@ else end ``` -![Redis 实现简易分布式锁](images/distributed-lock/distributed-lock-setnx.png) +![Redis 实现简易分布式锁](./images/distributed-lock/distributed-lock-setnx.png) 这是一种最简易的 Redis 分布式锁实现,实现方式比较简单,性能也很高效。不过,这种方式实现分布式锁存在一些问题。就比如应用程序遇到一些问题比如释放锁的逻辑突然挂掉,可能会导致锁无法被释放,进而造成共享资源无法再被其他线程/进程访问。 @@ -101,6 +101,8 @@ Redisson 是一个开源的 Java 语言 Redis 客户端,提供了很多开箱 Redisson 中的分布式锁自带自动续期机制,使用起来非常简单,原理也比较简单,其提供了一个专门用来监控和续期锁的 **Watch Dog( 看门狗)**,如果操作共享资源的线程还未执行完成的话,Watch Dog 会不断地延长锁的过期时间,进而保证锁不会因为超时而被释放。 +![Redisson 看门狗自动续期](./images/distributed-lock/distributed-lock-redisson-renew-expiration.png) + 看门狗名字的由来于 `getLockWatchdogTimeou()` 方法,这个方法返回的是看门狗给锁续期的过期时间,默认为 30 秒([redisson-3.17.6](https://github.com/redisson/redisson/releases/tag/redisson-3.17.6))。 ```java @@ -158,7 +160,7 @@ Watch Dog 通过调用 `renewExpirationAsync()` 方法实现锁的异步续期 ```java protected CompletionStage renewExpirationAsync(long threadId) { return evalWriteAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, - // 如果指定的锁存在就续期,将其过期时间设置为 30s(默认) + // 判断是否为持锁线程,如果是就执行续期操作,就锁的过期时间设置为 30s(默认) "if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then " + "redis.call('pexpire', KEYS[1], ARGV[1]); " + "return 1; " + diff --git a/docs/distributed-system/images/distributed-lock/distributed-lock-redisson-renew-expiration.png b/docs/distributed-system/images/distributed-lock/distributed-lock-redisson-renew-expiration.png new file mode 100644 index 0000000000000000000000000000000000000000..432ec6a26fbcc649b9337ee708cb349130d92360 GIT binary patch literal 28291 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