From 78264ec79ab7ad2134d367ea869aa057d81b6018 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 8 Mar 2019 11:21:38 +0300 Subject: [PATCH] Feature - getCountDownLatch, getPermitExpirableSemaphore, getSemaphore, getFairLock methods added to RMultimap object #1963 --- .../java/org/redisson/RedissonMultimap.java | 45 +++++++++++++------ .../main/java/org/redisson/api/RMultimap.java | 32 +++++++++++++ 2 files changed, 63 insertions(+), 14 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonMultimap.java b/redisson/src/main/java/org/redisson/RedissonMultimap.java index aee227037..81d21fd06 100644 --- a/redisson/src/main/java/org/redisson/RedissonMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonMultimap.java @@ -27,10 +27,13 @@ import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.TimeUnit; +import org.redisson.api.RCountDownLatch; import org.redisson.api.RFuture; import org.redisson.api.RLock; import org.redisson.api.RMultimap; +import org.redisson.api.RPermitExpirableSemaphore; import org.redisson.api.RReadWriteLock; +import org.redisson.api.RSemaphore; import org.redisson.client.RedisClient; import org.redisson.client.codec.Codec; import org.redisson.client.codec.LongCodec; @@ -40,7 +43,6 @@ import org.redisson.client.protocol.RedisCommands; import org.redisson.client.protocol.decoder.MapScanResult; import org.redisson.codec.CompositeCodec; import org.redisson.command.CommandAsyncExecutor; -import org.redisson.command.CommandExecutor; import org.redisson.misc.Hash; import org.redisson.misc.RedissonPromise; @@ -67,24 +69,39 @@ public abstract class RedissonMultimap extends RedissonExpirable implement } @Override - public RLock getLock(K key) { - String lockName = getLockName(key); - return new RedissonLock((CommandExecutor) commandExecutor, lockName); + public RLock getFairLock(K key) { + String lockName = getLockByMapKey(key, "fairlock"); + return new RedissonFairLock(commandExecutor, lockName); } @Override - public RReadWriteLock getReadWriteLock(K key) { - String lockName = getLockName(key); - return new RedissonReadWriteLock((CommandExecutor) commandExecutor, lockName); + public RPermitExpirableSemaphore getPermitExpirableSemaphore(K key) { + String lockName = getLockByMapKey(key, "permitexpirablesemaphore"); + return new RedissonPermitExpirableSemaphore(commandExecutor, lockName); } - private String getLockName(Object key) { - ByteBuf keyState = encodeMapKey(key); - try { - return suffixName(getName(), Hash.hash128toBase64(keyState) + ":key"); - } finally { - keyState.release(); - } + @Override + public RCountDownLatch getCountDownLatch(K key) { + String lockName = getLockByMapKey(key, "countdownlatch"); + return new RedissonCountDownLatch(commandExecutor, lockName); + } + + @Override + public RSemaphore getSemaphore(K key) { + String lockName = getLockByMapKey(key, "semaphore"); + return new RedissonSemaphore(commandExecutor, lockName); + } + + @Override + public RLock getLock(K key) { + String lockName = getLockByMapKey(key, "lock"); + return new RedissonLock(commandExecutor, lockName); + } + + @Override + public RReadWriteLock getReadWriteLock(K key) { + String lockName = getLockByMapKey(key, "rw_lock"); + return new RedissonReadWriteLock(commandExecutor, lockName); } protected String hash(ByteBuf objectState) { diff --git a/redisson/src/main/java/org/redisson/api/RMultimap.java b/redisson/src/main/java/org/redisson/api/RMultimap.java index 9ab282c5f..8ffa65b42 100644 --- a/redisson/src/main/java/org/redisson/api/RMultimap.java +++ b/redisson/src/main/java/org/redisson/api/RMultimap.java @@ -29,6 +29,38 @@ import java.util.Set; */ public interface RMultimap extends RExpirable, RMultimapAsync { + /** + * Returns RCountDownLatch instance associated with key + * + * @param key - map key + * @return countdownlatch + */ + RCountDownLatch getCountDownLatch(K key); + + /** + * Returns RPermitExpirableSemaphore instance associated with key + * + * @param key - map key + * @return permitExpirableSemaphore + */ + RPermitExpirableSemaphore getPermitExpirableSemaphore(K key); + + /** + * Returns RSemaphore instance associated with key + * + * @param key - map key + * @return semaphore + */ + RSemaphore getSemaphore(K key); + + /** + * Returns RLock instance associated with key + * + * @param key - map key + * @return fairlock + */ + RLock getFairLock(K key); + /** * Returns RReadWriteLock instance associated with key *