RSetCache.getLock method added

pull/1423/head
Nikita 7 years ago
parent bcdc19d7db
commit 096155dff6

@ -25,6 +25,7 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.redisson.api.RFuture; import org.redisson.api.RFuture;
import org.redisson.api.RLock;
import org.redisson.api.RSetCache; import org.redisson.api.RSetCache;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.redisson.api.mapreduce.RCollectionMapReduce; import org.redisson.api.mapreduce.RCollectionMapReduce;
@ -37,6 +38,7 @@ import org.redisson.client.protocol.decoder.ScanObjectEntry;
import org.redisson.command.CommandAsyncExecutor; import org.redisson.command.CommandAsyncExecutor;
import org.redisson.eviction.EvictionScheduler; import org.redisson.eviction.EvictionScheduler;
import org.redisson.mapreduce.RedissonCollectionMapReduce; import org.redisson.mapreduce.RedissonCollectionMapReduce;
import org.redisson.misc.Hash;
import org.redisson.misc.RedissonPromise; import org.redisson.misc.RedissonPromise;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
@ -351,4 +353,19 @@ public class RedissonSetCache<V> extends RedissonExpirable implements RSetCache<
delete(); delete();
} }
private String getLockName(Object value) {
ByteBuf state = encode(value);
try {
return suffixName(getName(value), Hash.hash128toBase64(state) + ":lock");
} finally {
state.release();
}
}
@Override
public RLock getLock(V value) {
String lockName = getLockName(value);
return new RedissonLock(commandExecutor, lockName);
}
} }

@ -40,6 +40,14 @@ import org.redisson.api.mapreduce.RCollectionMapReduce;
*/ */
public interface RSetCache<V> extends Set<V>, RExpirable, RSetCacheAsync<V> { public interface RSetCache<V> extends Set<V>, RExpirable, RSetCacheAsync<V> {
/**
* Returns lock instance associated with <code>value</code>
*
* @param value - set value
* @return lock
*/
RLock getLock(V value);
/** /**
* Returns values iterator matches <code>pattern</code>. * Returns values iterator matches <code>pattern</code>.
* *

Loading…
Cancel
Save