From 169a86c9017b542b171eafd929d2be38931a8505 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 20 Mar 2017 16:50:05 +0300 Subject: [PATCH] RMap.getReadWriteLock method added --- redisson/src/main/java/org/redisson/RedissonMap.java | 9 ++++++++- redisson/src/main/java/org/redisson/api/RMap.java | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/RedissonMap.java b/redisson/src/main/java/org/redisson/RedissonMap.java index 14db82119..20d53f1ed 100644 --- a/redisson/src/main/java/org/redisson/RedissonMap.java +++ b/redisson/src/main/java/org/redisson/RedissonMap.java @@ -33,6 +33,7 @@ import java.util.UUID; import org.redisson.api.RFuture; import org.redisson.api.RLock; import org.redisson.api.RMap; +import org.redisson.api.RReadWriteLock; import org.redisson.client.codec.Codec; import org.redisson.client.codec.MapScanCodec; import org.redisson.client.codec.StringCodec; @@ -83,10 +84,16 @@ public class RedissonMap extends RedissonExpirable implements RMap { return new RedissonLock((CommandExecutor)commandExecutor, lockName, id); } + @Override + public RReadWriteLock getReadWriteLock(K key) { + String lockName = getLockName(key); + return new RedissonReadWriteLock((CommandExecutor)commandExecutor, lockName, id); + } + private String getLockName(Object key) { try { byte[] keyState = codec.getMapKeyEncoder().encode(key); - return "{" + getName() + "}:" + Hash.hashToBase64(keyState) + ":key"; + return suffixName(getName(), Hash.hashToBase64(keyState) + ":key"); } catch (IOException e) { throw new IllegalStateException(e); } diff --git a/redisson/src/main/java/org/redisson/api/RMap.java b/redisson/src/main/java/org/redisson/api/RMap.java index cae8c6738..7570abf97 100644 --- a/redisson/src/main/java/org/redisson/api/RMap.java +++ b/redisson/src/main/java/org/redisson/api/RMap.java @@ -33,6 +33,14 @@ import java.util.concurrent.ConcurrentMap; */ public interface RMap extends ConcurrentMap, RExpirable, RMapAsync { + /** + * Returns RReadWriteLock instance associated with key + * + * @param key - map key + * @return readWriteLock + */ + RReadWriteLock getReadWriteLock(K key); + /** * Returns RLock instance associated with key *