/**
* Copyright 2016 Nikita Koksharov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.redisson.api;
import java.util.concurrent.TimeUnit;
import org.redisson.client.codec.Codec;
import org.redisson.config.Config;
import org.redisson.codec.CodecProvider;
import org.redisson.liveobject.provider.ResolverProvider;
/**
* Main Redisson interface for access
* to all redisson objects with sync/async interface.
*
* @author Nikita Koksharov
*
*/
public interface RedissonClient {
/**
* Returns binary stream holder instance by <code>name</code>
*
* @param name of binary stream
* @return BinaryStream object
*/
RBinaryStream getBinaryStream(String name);
/**
* Returns geospatial items holder instance by <code>name</code>.
*
* @param <V> type of value
* @param name - name of object
* @return Geo object
*/
<V> RGeo<V> getGeo(String name);
/**
* Returns geospatial items holder instance by <code>name</code>
* using provided codec for geospatial members.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for value
* @return Geo object
*/
<V> RGeo<V> getGeo(String name, Codec codec);
/**
* Returns set-based cache instance by <code>name</code>.
* Supports value eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSet(String, Codec)}.</p>
*
* @param <V> type of value
* @param name - name of object
* @return SetCache object
*/
<V> RSetCache<V> getSetCache(String name);
/**
* Returns set-based cache instance by <code>name</code>.
* Supports value eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSet(String, Codec)}.</p>
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return SetCache object
*/
<V> RSetCache<V> getSetCache(String name, Codec codec);
/**
* Returns map-based cache instance by <code>name</code>
* using provided <code>codec</code> for both cache keys and values.
* Supports entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getMap(String, Codec)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return MapCache object
*/
<K, V> RMapCache<K, V> getMapCache(String name, Codec codec);
/**
* Returns map-based cache instance by name.
* Supports entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getMap(String)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return MapCache object
*/
<K, V> RMapCache<K, V> getMapCache(String name);
/**
* Returns object holder instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return Bucket object
*/
<V> RBucket<V> getBucket(String name);
/**
* Returns object holder instance by name
* using provided codec for object.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return Bucket object
*/
<V> RBucket<V> getBucket(String name, Codec codec);
/**
* Returns interface for mass operations with Bucket objects.
*
* @return Buckets
*/
RBuckets getBuckets();
/**
* Returns interface for mass operations with Bucket objects
* using provided codec for object.
*
* @param codec - codec for bucket objects
* @return Buckets
*/
RBuckets getBuckets(Codec codec);
/**
* Returns HyperLogLog instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return HyperLogLog object
*/
<V> RHyperLogLog<V> getHyperLogLog(String name);
/**
* Returns HyperLogLog instance by name
* using provided codec for hll objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return HyperLogLog object
*/
<V> RHyperLogLog<V> getHyperLogLog(String name, Codec codec);
/**
* Returns list instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return List object
*/
<V> RList<V> getList(String name);
/**
* Returns list instance by name
* using provided codec for list objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return List object
*/
<V> RList<V> getList(String name, Codec codec);
/**
* Returns List based Multimap instance by name.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return ListMultimap object
*/
<K, V> RListMultimap<K, V> getListMultimap(String name);
/**
* Returns List based Multimap instance by name
* using provided codec for both map keys and values.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return ListMultimap object
*/
<K, V> RListMultimap<K, V> getListMultimap(String name, Codec codec);
/**
* Returns List based Multimap instance by name.
* Supports key-entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSetMultimap(String)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return ListMultimapCache object
*/
<K, V> RListMultimapCache<K, V> getListMultimapCache(String name);
/**
* Returns List based Multimap instance by name
* using provided codec for both map keys and values.
* Supports key-entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSetMultimap(String, Codec)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return ListMultimapCache object
*/
<K, V> RListMultimapCache<K, V> getListMultimapCache(String name, Codec codec);
/**
* Returns local cached map instance by name.
* Configured by parameters of options-object.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param options - local map options
* @return LocalCachedMap object
*/
<K, V> RLocalCachedMap<K, V> getLocalCachedMap(String name, LocalCachedMapOptions options);
/**
* Returns local cached map instance by name
* using provided codec. Configured by parameters of options-object.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @param options - local map options
* @return LocalCachedMap object
*/
<K, V> RLocalCachedMap<K, V> getLocalCachedMap(String name, Codec codec, LocalCachedMapOptions options);
/**
* Returns map instance by name.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return Map object
*/
<K, V> RMap<K, V> getMap(String name);
/**
* Returns map instance by name
* using provided codec for both map keys and values.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return Map object
*/
<K, V> RMap<K, V> getMap(String name, Codec codec);
/**
* Returns Set based Multimap instance by name.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return SetMultimap object
*/
<K, V> RSetMultimap<K, V> getSetMultimap(String name);
/**
* Returns Set based Multimap instance by name
* using provided codec for both map keys and values.
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return SetMultimap object
*/
<K, V> RSetMultimap<K, V> getSetMultimap(String name, Codec codec);
/**
* Returns Set based Multimap instance by name.
* Supports key-entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSetMultimap(String)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @return SetMultimapCache object
*/
<K, V> RSetMultimapCache<K, V> getSetMultimapCache(String name);
/**
* Returns Set based Multimap instance by name
* using provided codec for both map keys and values.
* Supports key-entry eviction with a given TTL value.
*
* <p>If eviction is not required then it's better to use regular map {@link #getSetMultimap(String, Codec)}.</p>
*
* @param <K> type of key
* @param <V> type of value
* @param name - name of object
* @param codec - codec for keys and values
* @return SetMultimapCache object
*/
<K, V> RSetMultimapCache<K, V> getSetMultimapCache(String name, Codec codec);
/**
* Returns semaphore instance by name
*
* @param name - name of object
* @return Semaphore object
*/
RSemaphore getSemaphore(String name);
/**
* Returns semaphore instance by name.
* Supports lease time parameter for each acquired permit.
*
* @param name - name of object
* @return PermitExpirableSemaphore object
*/
RPermitExpirableSemaphore getPermitExpirableSemaphore(String name);
/**
* Returns lock instance by name.
* <p>
* Implements a <b>non-fair</b> locking so doesn't guarantees an acquire order by threads.
*
* @param name - name of object
* @return Lock object
*/
RLock getLock(String name);
/**
* Returns lock instance by name.
* <p>
* Implements a <b>fair</b> locking so it guarantees an acquire order by threads.
*
* @param name - name of object
* @return Lock object
*/
RLock getFairLock(String name);
/**
* Returns readWriteLock instance by name.
*
* @param name - name of object
* @return Lock object
*/
RReadWriteLock getReadWriteLock(String name);
/**
* Returns set instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return Set object
*/
<V> RSet<V> getSet(String name);
/**
* Returns set instance by name
* using provided codec for set objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return Set object
*/
<V> RSet<V> getSet(String name, Codec codec);
/**
* Returns sorted set instance by name.
* This sorted set uses comparator to sort objects.
*
* @param <V> type of value
* @param name - name of object
* @return SortedSet object
*/
<V> RSortedSet<V> getSortedSet(String name);
/**
* Returns sorted set instance by name
* using provided codec for sorted set objects.
* This sorted set sorts objects using comparator.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return SortedSet object
*/
<V> RSortedSet<V> getSortedSet(String name, Codec codec);
/**
* Returns Redis Sorted Set instance by name.
* This sorted set sorts objects by object score.
*
* @param <V> type of value
* @param name - name of object
* @return ScoredSortedSet object
*/
<V> RScoredSortedSet<V> getScoredSortedSet(String name);
/**
* Returns Redis Sorted Set instance by name
* using provided codec for sorted set objects.
* This sorted set sorts objects by object score.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return ScoredSortedSet object
*/
<V> RScoredSortedSet<V> getScoredSortedSet(String name, Codec codec);
/**
* Returns String based Redis Sorted Set instance by name
* All elements are inserted with the same score during addition,
* in order to force lexicographical ordering
*
* @param name - name of object
* @return LexSortedSet object
*/
RLexSortedSet getLexSortedSet(String name);
/**
* Returns topic instance by name.
*
* @param <M> type of message
* @param name - name of object
* @return Topic object
*/
<M> RTopic<M> getTopic(String name);
/**
* Returns topic instance by name
* using provided codec for messages.
*
* @param <M> type of message
* @param name - name of object
* @param codec - codec for message
* @return Topic object
*/
<M> RTopic<M> getTopic(String name, Codec codec);
/**
* Returns topic instance satisfies by pattern name.
*
* Supported glob-style patterns:
* h?llo subscribes to hello, hallo and hxllo
* h*llo subscribes to hllo and heeeello
* h[ae]llo subscribes to hello and hallo, but not hillo
*
* @param <M> type of message
* @param pattern of the topic
* @return PatterTopic object
*/
<M> RPatternTopic<M> getPatternTopic(String pattern);
/**
* Returns topic instance satisfies by pattern name
* using provided codec for messages.
*
* Supported glob-style patterns:
* h?llo subscribes to hello, hallo and hxllo
* h*llo subscribes to hllo and heeeello
* h[ae]llo subscribes to hello and hallo, but not hillo
*
* @param <M> type of message
* @param pattern of the topic
* @param codec - codec for message
* @return PatterTopic object
*/
<M> RPatternTopic<M> getPatternTopic(String pattern, Codec codec);
/**
* Returns unbounded fair queue instance by name.
*
* @param <V> type of value
* @param name of queue
* @return queue
*/
<V> RBlockingFairQueue<V> getBlockingFairQueue(String name);
<V> RBlockingFairQueue<V> getBlockingFairQueue(String name, Codec codec);
/**
* Returns unbounded queue instance by name.
*
* @param <V> type of value
* @param name of object
* @return queue object
*/
<V> RQueue<V> getQueue(String name);
/**
* Returns unbounded delayed queue instance by name.
* <p>
* Could be attached to destination queue only.
* All elements are inserted with transfer delay to destination queue.
*
* @param <V> type of value
* @param destinationQueue - destination queue
* @return Delayed queue object
*/
<V> RDelayedQueue<V> getDelayedQueue(RQueue<V> destinationQueue);
/**
* Returns unbounded queue instance by name
* using provided codec for queue objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for message
* @return Queue object
*/
<V> RQueue<V> getQueue(String name, Codec codec);
/**
* Returns priority unbounded queue instance by name.
* It uses comparator to sort objects.
*
* @param <V> type of value
* @param name of object
* @return Queue object
*/
<V> RPriorityQueue<V> getPriorityQueue(String name);
/**
* Returns priority unbounded queue instance by name
* using provided codec for queue objects.
* It uses comparator to sort objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for message
* @return Queue object
*/
<V> RPriorityQueue<V> getPriorityQueue(String name, Codec codec);
/**
* Returns priority unbounded deque instance by name.
* It uses comparator to sort objects.
*
* @param <V> type of value
* @param name of object
* @return Queue object
*/
<V> RPriorityDeque<V> getPriorityDeque(String name);
/**
* Returns priority unbounded deque instance by name
* using provided codec for queue objects.
* It uses comparator to sort objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for message
* @return Queue object
*/
<V> RPriorityDeque<V> getPriorityDeque(String name, Codec codec);
/**
* Returns unbounded blocking queue instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return BlockingQueue object
*/
<V> RBlockingQueue<V> getBlockingQueue(String name);
/**
* Returns unbounded blocking queue instance by name
* using provided codec for queue objects.
*
* @param <V> type of value
* @param name - name of queue
* @param codec - queue objects codec
* @return BlockingQueue object
*/
<V> RBlockingQueue<V> getBlockingQueue(String name, Codec codec);
/**
* Returns bounded blocking queue instance by name.
*
* @param <V> type of value
* @param name of queue
* @return BoundedBlockingQueue object
*/
<V> RBoundedBlockingQueue<V> getBoundedBlockingQueue(String name);
/**
* Returns bounded blocking queue instance by name
* using provided codec for queue objects.
*
* @param <V> type of value
* @param name - name of queue
* @param codec - codec for values
* @return BoundedBlockingQueue object
*/
<V> RBoundedBlockingQueue<V> getBoundedBlockingQueue(String name, Codec codec);
/**
* Returns unbounded deque instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return Deque object
*/
<V> RDeque<V> getDeque(String name);
/**
* Returns unbounded deque instance by name
* using provided codec for deque objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return Deque object
*/
<V> RDeque<V> getDeque(String name, Codec codec);
/**
* Returns unbounded blocking deque instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return BlockingDeque object
*/
<V> RBlockingDeque<V> getBlockingDeque(String name);
/**
* Returns unbounded blocking deque instance by name
* using provided codec for deque objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - deque objects codec
* @return BlockingDeque object
*/
<V> RBlockingDeque<V> getBlockingDeque(String name, Codec codec);
/**
* Returns atomicLong instance by name.
*
* @param name - name of object
* @return AtomicLong object
*/
RAtomicLong getAtomicLong(String name);
/**
* Returns atomicDouble instance by name.
*
* @param name - name of object
* @return AtomicDouble object
*/
RAtomicDouble getAtomicDouble(String name);
/**
* Returns countDownLatch instance by name.
*
* @param name - name of object
* @return CountDownLatch object
*/
RCountDownLatch getCountDownLatch(String name);
/**
* Returns bitSet instance by name.
*
* @param name - name of object
* @return BitSet object
*/
RBitSet getBitSet(String name);
/**
* Returns bloom filter instance by name.
*
* @param <V> type of value
* @param name - name of object
* @return BloomFilter object
*/
<V> RBloomFilter<V> getBloomFilter(String name);
/**
* Returns bloom filter instance by name
* using provided codec for objects.
*
* @param <V> type of value
* @param name - name of object
* @param codec - codec for values
* @return BloomFilter object
*/
<V> RBloomFilter<V> getBloomFilter(String name, Codec codec);
/**
* Returns script operations object
*
* @return Script object
*/
RScript getScript();
/**
* Returns ScheduledExecutorService by name
*
* @param name - name of object
* @return ScheduledExecutorService object
*/
RScheduledExecutorService getExecutorService(String name);
/**
* Returns ScheduledExecutorService by name
* using provided codec for task, response and request serialization
*
* Please use getExecutorService(String name, Codec codec) method instead.
*
* @deprecated - use {@link #getExecutorService(String, Codec)} instead.
*
* @param name - name of object
* @param codec - codec for task, response and request
* @return ScheduledExecutorService object
*/
@Deprecated
RScheduledExecutorService getExecutorService(Codec codec, String name);
/**
* Returns ScheduledExecutorService by name
* using provided codec for task, response and request serialization
*
* @param name - name of object
* @param codec - codec for task, response and request
* @return ScheduledExecutorService object
* @since 2.8.2
*/
RScheduledExecutorService getExecutorService(String name, Codec codec);
/**
* Returns object for remote operations prefixed with the default name (redisson_remote_service)
*
* @return RemoteService object
*/
RRemoteService getRemoteService();
/**
* Returns object for remote operations prefixed with the default name (redisson_remote_service)
* and uses provided codec for method arguments and result.
*
* @param codec - codec for response and request
* @return RemoteService object
*/
RRemoteService getRemoteService(Codec codec);
/**
* Returns object for remote operations prefixed with the specified name
*
* @param name - the name used as the Redis key prefix for the services
* @return RemoteService object
*/
RRemoteService getRemoteService(String name);
/**
* Returns object for remote operations prefixed with the specified name
* and uses provided codec for method arguments and result.
*
* @param name - the name used as the Redis key prefix for the services
* @param codec - codec for response and request
* @return RemoteService object
*/
RRemoteService getRemoteService(String name, Codec codec);
/**
* Return batch object which executes group of
* command in pipeline.
*
* See <a href="http://redis.io/topics/pipelining">http://redis.io/topics/pipelining</a>
*
* @return Batch object
*/
RBatch createBatch();
/**
* Returns interface with methods for Redis keys.
* Each of Redis/Redisson object associated with own key
*
* @return Keys object
*/
RKeys getKeys();
/**
* Returns RedissonAttachedLiveObjectService which can be used to
* retrieve live REntity(s)
*
* @return LiveObjectService object
*/
RLiveObjectService getLiveObjectService();
/**
* Shutdown Redisson instance but <b>NOT</b> Redis server
*
* This equates to invoke shutdown(2, 15, TimeUnit.SECONDS);
*/
void shutdown();
/**
* Shuts down Redisson instance <b>NOT</b> Redis server
*
* Shutdown ensures that no tasks are submitted for <i>'the quiet period'</i>
* (usually a couple seconds) before it shuts itself down. If a task is submitted during the quiet period,
* it is guaranteed to be accepted and the quiet period will start over.
*
* @param quietPeriod the quiet period as described in the documentation
* @param timeout the maximum amount of time to wait until the executor is {@linkplain #shutdown()}
* regardless if a task was submitted during the quiet period
* @param unit the unit of {@code quietPeriod} and {@code timeout}
*/
void shutdown(long quietPeriod, long timeout, TimeUnit unit);
/**
* Allows to get configuration provided
* during Redisson instance creation. Further changes on
* this object not affect Redisson instance.
*
* @return Config object
*/
Config getConfig();
/**
* Returns the CodecProvider instance
*
* @return CodecProvider object
*/
public CodecProvider getCodecProvider();
/**
* Returns the ResolverProvider instance
*
* @return ResolverProvider object
*/
public ResolverProvider getResolverProvider();
/**
* Get Redis nodes group for server operations
*
* @return NodesGroup object
*/
NodesGroup<Node> getNodesGroup();
/**
* Get Redis cluster nodes group for server operations
*
* @return ClusterNodesGroup object
*/
ClusterNodesGroup getClusterNodesGroup();
/**
* Returns {@code true} if this Redisson instance has been shut down.
*
* @return code true} if this Redisson instance has been shut down overwise <code>false</code>
*/
boolean isShutdown();
/**
* Returns {@code true} if this Redisson instance was started to be shutdown
* or was shutdown {@link #isShutdown()} already.
*
* @return {@code true} if this Redisson instance was started to be shutdown
* or was shutdown {@link #isShutdown()} already.
*/
boolean isShuttingDown();
}