RMap.getReadWriteLock method added

pull/816/head
Nikita 8 years ago
parent ecf44e6d9c
commit 169a86c901

@ -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<K, V> extends RedissonExpirable implements RMap<K, V> {
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);
}

@ -33,6 +33,14 @@ import java.util.concurrent.ConcurrentMap;
*/
public interface RMap<K, V> extends ConcurrentMap<K, V>, RExpirable, RMapAsync<K, V> {
/**
* Returns <code>RReadWriteLock</code> instance associated with key
*
* @param key - map key
* @return readWriteLock
*/
RReadWriteLock getReadWriteLock(K key);
/**
* Returns <code>RLock</code> instance associated with key
*

Loading…
Cancel
Save