クラス RedisLockRegistry

java.lang.ObjectSE
org.springframework.integration.redis.util.RedisLockRegistry
実装済みのインターフェース一覧:
DisposableBean, ExpirableLockRegistry<DistributedLock>, LockRegistry<DistributedLock>, RenewableLockRegistry<DistributedLock>

public final class RedisLockRegistry extends ObjectSE implements ExpirableLockRegistry<DistributedLock>, DisposableBean, RenewableLockRegistry<DistributedLock>
Redis を使用して分散ロックを提供する ExpirableLockRegistry の実装。ロックは、キー registryKey:lockKey に保存されます。ロックは(デフォルトでは 60)秒後に期限切れになります。期限切れのロックのロックを解除するスレッドは、IllegalStateExceptionSE を取得します。保護されたリソースが危険にさらされた可能性があるため、これは重大なエラーと見なす必要があります。

ロックは再入可能です。

ただし、ロックはレジストリによってスコープが定められています。同じキーを持つ別のレジストリからのロック(たとえレジストリが同じ "registryKey" を使用していたとしても)は別のロックであり、最初のロックがロックされている間は、同じスレッドが 2 番目のロックを取得することはできません。

注: これは低遅延アプリケーション向けではありません。複数の JVM 間でのリソースロックを目的としています。

ConditionSE はサポートされていません。

ロックインスタンスは、キーごとにキャッシュされ、後で再利用されます。キャッシュ内のすべてのロックが取得された場合、obtain(Object) メソッドは CannotAcquireLockException 例外をスローします。そうでない場合、古い未使用のロックはキャッシュから削除されます。このような孤立した RedisLockRegistry.RedisLock をロックしようとすると、同じキーに対して異なるスレッドから二重ロックが発生するのを防ぐため、別の CannotAcquireLockException 例外がスローされます。

導入:
4.0
作成者:
Gary Russell, Konstantin Yakimov, Artem Bilan, Vedran Pavic, Unseok Kim, Anton Gabov, Christian Tzolov, Eddie Cho, Myeonghyeon Lee, Roman Zabaluev, Alex Peelman, Youbin Wu, Michal Domagala, Severin Kistler, Yordan Tsintsov, Glenn Renfro
  • コンストラクターの詳細

    • RedisLockRegistry

      public RedisLockRegistry(RedisConnectionFactory connectionFactory, StringSE registryKey)
      デフォルト (60 秒) のロック有効期限でロックレジストリを作成します。
      パラメーター:
      connectionFactory - 接続ファクトリ。
      registryKey - ロックのキープレフィックス。
    • RedisLockRegistry

      public RedisLockRegistry(RedisConnectionFactory connectionFactory, StringSE registryKey, long expireAfter)
      指定されたロック有効期限でロックレジストリを作成します。
      パラメーター:
      connectionFactory - 接続ファクトリ。
      registryKey - ロックのキープレフィックス。
      expireAfter - ミリ秒単位の有効期限。
    • RedisLockRegistry

      public RedisLockRegistry(RedisConnectionFactory connectionFactory, StringSE registryKey, DurationSE expireAfter)
      指定されたロック有効期限でロックレジストリを作成します。
      パラメーター:
      connectionFactory - 接続ファクトリ。
      registryKey - ロックのキープレフィックス。
      expireAfter - DurationSE の有効期限。
      導入:
      7.0
  • 方法の詳細

    • setExecutor

      public void setExecutor(ExecutorSE executor)
      ExecutorSE を設定します。指定されていない場合は、デフォルトのキャッシュされたスレッドプール Executor が使用されます。
      パラメーター:
      executor - エグゼキュータサービス
      導入:
      5.0.5
    • setRenewalTaskScheduler

      public void setRenewalTaskScheduler(TaskScheduler renewalTaskScheduler)
      インターフェースからコピーされた説明: RenewableLockRegistry
      更新タスクに使用する TaskScheduler を設定します。renewalTaskScheduler が設定されている場合、スレッドの動作中にロックが期限切れにならないように、ロックを定期的に更新するために使用されます。
      次で指定:
      インターフェース RenewableLockRegistry<DistributedLock> 内の setRenewalTaskScheduler 
      パラメーター:
      renewalTaskScheduler - タスクスケジューラを更新する
    • setCacheCapacity

      public void setCacheCapacity(int cacheCapacity)
      キャッシュされたロックの容量を設定します。現在キャッシュされているロックの数が新しい容量を超えた場合、このメソッドは使用されていないロックを削除しようとします。
      パラメーター:
      cacheCapacity - キャッシュされたロックの容量(デフォルトは 100_000)。
      導入:
      5.5.6
      関連事項:
    • setIdleBetweenTries

      public void setIdleBetweenTries(DurationSE idleBetweenTries)
      obtainLock の試行間のスリープ時間として DurationSE を指定します。デフォルトは 100 ミリ秒です。
      パラメーター:
      idleBetweenTries - DurationSE は obtainLock の試行の間にスリープ状態になります。
      導入:
      6.4.0
    • setRedisLockType

      public void setRedisLockType(RedisLockRegistry.RedisLockType redisLockType)
      作業する RedisLockRegistry.RedisLockType モードを設定します。デフォルトでは、RedisLockRegistry.RedisLockType.SPIN_LOCK が使用され、すべての環境で動作します。マスター / レプリカ接続でない場合、RedisLockRegistry.RedisLockType.PUB_SUB_LOCK が推奨されるモードです。ネットワークのチャタリングが少なくなります。unlockType の型を設定し、ロック方法を選択します。
      パラメーター:
      redisLockType - で動作する RedisLockRegistry.RedisLockType
      導入:
      5.5.13
    • obtain

      public DistributedLock obtain(ObjectSE lockKey)
      インターフェースからコピーされた説明: LockRegistry
      パラメーターオブジェクトに関連付けられたロックを取得します。
      次で指定:
      インターフェース LockRegistry<DistributedLock> 内の obtain 
      パラメーター:
      lockKey - ロックが関連付けられているオブジェクト。
      戻り値:
      関連するロック。
    • expireUnusedOlderThan

      public void expireUnusedOlderThan(long age)
      インターフェースからコピーされた説明: ExpirableLockRegistry
      現在ロックされていない「年齢」より前に最後に取得されたロックを削除します。
      次で指定:
      インターフェース ExpirableLockRegistry<DistributedLock> 内の expireUnusedOlderThan 
      パラメーター:
      age - ロックが最後に取得されてからの時間。
    • destroy

      public void destroy()
      次で指定:
      インターフェース DisposableBean 内の destroy 
    • renewLock

      public void renewLock(ObjectSE lockKey)
      インターフェースからコピーされた説明: RenewableLockRegistry
      ロックの存続時間を更新すると、パラメーターオブジェクトに関連付けられます。ロックは現在のスレッドによって保持される必要があります
      次で指定:
      インターフェース RenewableLockRegistry<DistributedLock> 内の renewLock 
      パラメーター:
      lockKey - ロックが関連付けられているオブジェクト。
    • renewLock

      public void renewLock(ObjectSE lockKey, DurationSE ttl)
      インターフェースからコピーされた説明: RenewableLockRegistry
      ロックの存続時間の更新は、特定の値を持つパラメーターオブジェクトに関連付けられます。ロックは現在のスレッドによって保持されている必要があります。
      次で指定:
      インターフェース RenewableLockRegistry<DistributedLock> 内の renewLock 
      パラメーター:
      lockKey - ロックが関連付けられているオブジェクト。
      ttl - ロック状態データの特定の有効期間
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString