public final class RedisLockRegistry
extends java.lang.Object
implements org.springframework.integration.support.locks.ExpirableLockRegistry, org.springframework.beans.factory.DisposableBean
LockRegistry 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.
| Constructor and Description |
|---|
RedisLockRegistry(org.springframework.data.redis.connection.RedisConnectionFactory connectionFactory,
java.lang.String registryKey)
Constructs a lock registry with the default (60 second) lock expiration.
|
RedisLockRegistry(org.springframework.data.redis.connection.RedisConnectionFactory connectionFactory,
java.lang.String registryKey,
long expireAfter)
Constructs a lock registry with the supplied lock expiration.
|
| Modifier and Type | Method and Description |
|---|---|
void |
destroy() |
void |
expireUnusedOlderThan(long age) |
java.util.concurrent.locks.Lock |
obtain(java.lang.Object lockKey) |
void |
setExecutor(java.util.concurrent.Executor executor)
Set the
Executor, where is not provided then a default of
cached thread pool Executor will be used. |
public RedisLockRegistry(org.springframework.data.redis.connection.RedisConnectionFactory connectionFactory,
java.lang.String registryKey)
connectionFactory - The connection factory.registryKey - The key prefix for locks.public RedisLockRegistry(org.springframework.data.redis.connection.RedisConnectionFactory connectionFactory,
java.lang.String registryKey,
long expireAfter)
connectionFactory - The connection factory.registryKey - The key prefix for locks.expireAfter - The expiration in milliseconds.public void setExecutor(java.util.concurrent.Executor executor)
Executor, where is not provided then a default of
cached thread pool Executor will be used.executor - the executor servicepublic java.util.concurrent.locks.Lock obtain(java.lang.Object lockKey)
obtain in interface org.springframework.integration.support.locks.LockRegistrypublic void expireUnusedOlderThan(long age)
expireUnusedOlderThan in interface org.springframework.integration.support.locks.ExpirableLockRegistrypublic void destroy()
destroy in interface org.springframework.beans.factory.DisposableBean