Class RedisLockRegistry

java.lang.Object
org.springframework.integration.redis.util.RedisLockRegistry
All Implemented Interfaces:
DisposableBean, ExpirableLockRegistry, LockRegistry

public final class RedisLockRegistry
extends Object
implements ExpirableLockRegistry, DisposableBean
Implementation of ExpirableLockRegistry providing a distributed lock using Redis. Locks are stored under the key registryKey:lockKey. Locks expire after (default 60) seconds. Threads unlocking an expired lock will get an IllegalStateException. This should be considered as a critical error because it is possible the protected resources were compromised.

Locks are reentrant.

However, locks are scoped by the registry; a lock from a different registry with the same key (even if the registry uses the same 'registryKey') are different locks, and the second cannot be acquired by the same thread while the first is locked.

Note: This is not intended for low latency applications. It is intended for resource locking across multiple JVMs.

Conditions are not supported.

Since:
4.0
Author:
Gary Russell, Konstantin Yakimov, Artem Bilan, Vedran Pavic
  • Constructor Details

    • RedisLockRegistry

      public RedisLockRegistry​(RedisConnectionFactory connectionFactory, String registryKey)
      Constructs a lock registry with the default (60 second) lock expiration.
      Parameters:
      connectionFactory - The connection factory.
      registryKey - The key prefix for locks.
    • RedisLockRegistry

      public RedisLockRegistry​(RedisConnectionFactory connectionFactory, String registryKey, long expireAfter)
      Constructs a lock registry with the supplied lock expiration.
      Parameters:
      connectionFactory - The connection factory.
      registryKey - The key prefix for locks.
      expireAfter - The expiration in milliseconds.
  • Method Details

    • setExecutor

      public void setExecutor​(Executor executor)
      Set the Executor, where is not provided then a default of cached thread pool Executor will be used.
      Parameters:
      executor - the executor service
      Since:
      5.0.5
    • obtain

      public Lock obtain​(Object lockKey)
      Description copied from interface: LockRegistry
      Obtains the lock associated with the parameter object.
      Specified by:
      obtain in interface LockRegistry
      Parameters:
      lockKey - The object with which the lock is associated.
      Returns:
      The associated lock.
    • expireUnusedOlderThan

      public void expireUnusedOlderThan​(long age)
      Description copied from interface: ExpirableLockRegistry
      Remove locks last acquired more than 'age' ago that are not currently locked.
      Specified by:
      expireUnusedOlderThan in interface ExpirableLockRegistry
      Parameters:
      age - the time since the lock was last obtained.
    • destroy

      public void destroy()
      Specified by:
      destroy in interface DisposableBean