Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.redisson.api.RMapRx Maven / Gradle / Ivy
Go to download
Easy Redis Java client and Real-Time Data Platform. Valkey compatible. Sync/Async/RxJava3/Reactive API. Client side caching. Over 50 Redis based Java objects and services: JCache API, Apache Tomcat, Hibernate, Spring, Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Scheduler, RPC
/**
* Copyright (c) 2013-2024 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.Collection;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.Function;
import org.redisson.api.map.MapLoader;
import org.redisson.api.map.MapWriter;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.Single;
/**
* RxJava2 interface for Redis based implementation
* of {@link java.util.concurrent.ConcurrentMap} and {@link java.util.Map}
*
* This map uses serialized state of key instead of hashCode or equals methods.
* This map doesn't allow to store null
as key or value.
*
* @author Nikita Koksharov
*
* @param key
* @param value
*/
public interface RMapRx extends RExpirableRx {
/**
* Associates specified key with the given value if key isn't already associated with a value.
* Otherwise, replaces the associated value with the results of the given
* remapping function, or removes if the result is {@code null}.
*
* @param key - map key
* @param value - value to be merged with the existing value
* associated with the key or to be associated with the key,
* if no existing value
* @param remappingFunction - the function is invoked with the existing value to compute new value
* @return new value associated with the specified key or
* {@code null} if no value associated with the key
*/
Maybe merge(K key, V value, BiFunction super V, ? super V, ? extends V> remappingFunction);
/**
* Computes a new mapping for the specified key and its current mapped value.
*
* @param key - map key
* @param remappingFunction - function to compute a value
* @return the new value associated with the specified key, or {@code null} if none
*/
Maybe compute(K key, BiFunction super K, ? super V, ? extends V> remappingFunction);
/**
* Computes a mapping for the specified key if it's not mapped before.
*
* @param key - map key
* @param mappingFunction - function to compute a value
* @return current or new computed value associated with
* the specified key, or {@code null} if the computed value is null
*/
Maybe computeIfAbsent(K key, Function super K, ? extends V> mappingFunction);
/**
* Computes a mapping for the specified key only if it's already mapped.
*
* @param key - map key
* @param remappingFunction - function to compute a value
* @return the new value associated with the specified key, or null if none
*/
Maybe computeIfPresent(K key, BiFunction super K, ? super V, ? extends V> remappingFunction);
/**
* Loads all map entries to this Redis map using {@link org.redisson.api.map.MapLoader}.
*
* @param replaceExistingValues - true
if existed values should be replaced, false
otherwise.
* @param parallelism - parallelism level, used to increase speed of process execution
* @return void
*/
Completable loadAll(boolean replaceExistingValues, int parallelism);
/**
* Loads map entries using {@link org.redisson.api.map.MapLoader} whose keys are listed in defined keys
parameter.
*
* @param keys - map keys
* @param replaceExistingValues - true
if existed values should be replaced, false
otherwise.
* @param parallelism - parallelism level, used to increase speed of process execution
* @return void
*/
Completable loadAll(Set extends K> keys, boolean replaceExistingValues, int parallelism);
/**
* Returns size of value mapped by key in bytes
*
* @param key - map key
* @return size of value
*/
Single valueSize(K key);
/**
* Returns map slice contained the mappings with defined keys
.
*
* If map doesn't contain value/values for specified key/keys and {@link MapLoader} is defined
* then value/values will be loaded in read-through mode.
*
* The returned map is NOT backed by the original map.
*
* @param keys - map keys
* @return Map slice
*/
Single> getAll(Set keys);
/**
* Stores map entries specified in map
object in batch mode.
*
* If {@link MapWriter} is defined then map entries will be stored in write-through mode.
*
* @param map mappings to be stored in this map
* @return void
*/
Completable putAll(Map extends K, ? extends V> map);
/**
* Adds the given delta
to the current value
* by mapped key
.
*
* Works only with codecs below
*
* {@link org.redisson.codec.JsonJacksonCodec},
*
* {@link org.redisson.client.codec.StringCodec},
*
* {@link org.redisson.client.codec.IntegerCodec},
*
* {@link org.redisson.client.codec.DoubleCodec}
*
* {@link org.redisson.client.codec.LongCodec}
*
* @param key - map key
* @param delta the value to add
* @return the updated value
*/
Single addAndGet(K key, Number delta);
/**
* Returns true
if this map contains any map entry
* with specified value
, otherwise false
*
* @param value - map value
* @return true
if this map contains any map entry
* with specified value
, otherwise false
*/
Single containsValue(Object value);
/**
* Returns true
if this map contains map entry
* mapped by specified key
, otherwise false
*
* @param key - map key
* @return true
if this map contains map entry
* mapped by specified key
, otherwise false
*/
Single containsKey(Object key);
/**
* Returns size of this map
*
* @return size
*/
Single size();
/**
* Removes map entries mapped by specified keys
.
*
* Works faster than {@link #remove(Object)}
but not returning
* the value.
*
* If {@link MapWriter} is defined then keys
are deleted in write-through mode.
*
* @param keys - map keys
* @return the number of keys that were removed from the hash, not including specified but non existing keys
*/
Single fastRemove(K... keys);
/**
* Stores the specified value
mapped by specified key
.
*
* Works faster than {@link #put(Object, Object)}
but not returning
* previous value.
*
* Returns true
if key is a new key in the hash and value was set or
* false
if key already exists in the hash and the value was updated.
*
* If {@link MapWriter} is defined then map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return true
if key is a new key in the hash and value was set.
* false
if key already exists in the hash and the value was updated.
*/
Single fastPut(K key, V value);
/**
* Stores the specified value
mapped by specified key
* only if there is no value with specifiedkey
stored before.
*
* Returns true
if key is a new one in the hash and value was set or
* false
if key already exists in the hash and change hasn't been made.
*
* Works faster than {@link #putIfAbsent(Object, Object)}
but not returning
* the previous value associated with key
*
* If {@link MapWriter} is defined then new map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return true
if key is a new one in the hash and value was set.
* false
if key already exists in the hash and change hasn't been made.
*/
Single fastPutIfAbsent(K key, V value);
/**
* Read all keys at once
*
* @return keys
*/
Single> readAllKeySet();
/**
* Read all values at once
*
* @return values
*/
Single> readAllValues();
/**
* Read all map entries at once
*
* @return entries
*/
Single>> readAllEntrySet();
/**
* Read all map as local instance at once
*
* @return map
*/
Single> readAllMap();
/**
* Returns the value mapped by defined key
or {@code null} if value is absent.
*
* If map doesn't contain value for specified key and {@link MapLoader} is defined
* then value will be loaded in read-through mode.
*
* @param key the key
* @return the value mapped by defined key
or {@code null} if value is absent
*/
Maybe get(K key);
/**
* Stores the specified value
mapped by specified key
.
* Returns previous value if map entry with specified key
already existed.
*
* If {@link MapWriter} is defined then map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return previous associated value
*/
Maybe put(K key, V value);
/**
* Removes map entry by specified key
and returns value.
*
* If {@link MapWriter} is defined then key
is deleted in write-through mode.
*
* @param key - map key
* @return deleted value, null
if map entry doesn't exist
*/
Maybe remove(K key);
/**
* Replaces previous value with a new value
mapped by specified key
.
* Returns null
if there is no map entry stored before and doesn't store new map entry.
*
* If {@link MapWriter} is defined then new value
is written in write-through mode.
*
* @param key - map key
* @param value - map value
* @return previous associated value
* or null
if there is no map entry stored before and doesn't store new map entry
*/
Maybe replace(K key, V value);
/**
* Replaces previous oldValue
with a newValue
mapped by specified key
.
* Returns false
if previous value doesn't exist or equal to oldValue
.
*
* If {@link MapWriter} is defined then newValue
is written in write-through mode.
*
* @param key - map key
* @param oldValue - map old value
* @param newValue - map new value
* @return true
if value has been replaced otherwise false
.
*/
Single replace(K key, V oldValue, V newValue);
/**
* Removes map entry only if it exists with specified key
and value
.
*
* If {@link MapWriter} is defined then key
is deleted in write-through mode.
*
* @param key - map key
* @param value - map value
* @return true
if map entry has been removed otherwise false
.
*/
Single remove(Object key, Object value);
/**
* Stores the specified value
mapped by specified key
* only if there is no value with specifiedkey
stored before.
*
* If {@link MapWriter} is defined then new map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return null
if key is a new one in the hash and value was set.
* Previous value if key already exists in the hash and change hasn't been made.
*/
Maybe putIfAbsent(K key, V value);
/**
* Stores the specified value
mapped by key
* only if mapping already exists.
*
* If {@link MapWriter} is defined then new map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return null
if key doesn't exist in the hash and value hasn't been set.
* Previous value if key already exists in the hash and new value has been stored.
*/
Maybe putIfExists(K key, V value);
/**
* Returns random keys from this map limited by count
*
* @param count - keys amount to return
* @return random keys
*/
Single> randomKeys(int count);
/**
* Returns random map entries from this map limited by count
*
* @param count - entries amount to return
* @return random entries
*/
Single> randomEntries(int count);
/**
* Stores the specified value
mapped by key
* only if mapping already exists.
*
* Returns true
if key is a new one in the hash and value was set or
* false
if key already exists in the hash and change hasn't been made.
*
* Works faster than {@link #putIfExists(Object, Object)}
but doesn't return
* previous value associated with key
*
* If {@link MapWriter} is defined then new map entry is stored in write-through mode.
*
* @param key - map key
* @param value - map value
* @return true
if key already exists in the hash and new value has been stored.
* false
if key doesn't exist in the hash and value hasn't been set.
*/
Single fastPutIfExists(K key, V value);
/**
* Returns iterator over map entries collection.
* Map entries are loaded in batch. Batch size is 10
.
*
* @see #readAllEntrySet()
*
* @return iterator
*/
Flowable> entryIterator();
/**
* Returns iterator over map entries collection.
* Map entries are loaded in batch. Batch size is defined by count
param.
*
* @see #readAllEntrySet()
*
* @param count - size of entries batch
* @return iterator
*/
Flowable> entryIterator(int count);
/**
* Returns iterator over map entries collection.
* Map entries are loaded in batch. Batch size is 10
.
* If keyPattern
is not null then only entries mapped by matched keys of this pattern are loaded.
*
* 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
*
* @see #readAllEntrySet()
*
* @param pattern - key pattern
* @return iterator
*/
Flowable> entryIterator(String pattern);
/**
* Returns iterator over map entries collection.
* Map entries are loaded in batch. Batch size is defined by count
param.
* If keyPattern
is not null then only entries mapped by matched keys of this pattern are loaded.
*
* 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
*
* @see #readAllEntrySet()
*
* @param pattern - key pattern
* @param count - size of entries batch
* @return iterator
*/
Flowable> entryIterator(String pattern, int count);
/**
* Returns iterator over values collection of this map.
* Values are loaded in batch. Batch size is 10
.
*
* @see #readAllValues()
*
* @return iterator
*/
Flowable valueIterator();
/**
* Returns iterator over values collection of this map.
* Values are loaded in batch. Batch size is defined by count
param.
*
* @see #readAllValues()
*
* @param count - size of values batch
* @return iterator
*/
Flowable valueIterator(int count);
/**
* Returns iterator over values collection of this map.
* Values are loaded in batch. Batch size is 10
.
* If keyPattern
is not null then only values mapped by matched keys of this pattern are loaded.
*
* Use org.redisson.client.codec.StringCodec
for Map keys.
*
* Usage example:
*
* Codec valueCodec = ...
* RMapRx map = redissonClient.getMap("simpleMap", new CompositeCodec(StringCodec.INSTANCE, valueCodec, valueCodec));
*
* // or
*
* RMapRx map = redissonClient.getMap("simpleMap", StringCodec.INSTANCE);
*
*
* 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
*
* @see #readAllValues()
*
* @param pattern - key pattern
* @return iterator
*/
Flowable valueIterator(String pattern);
/**
* Returns iterator over values collection of this map.
* Values are loaded in batch. Batch size is defined by count
param.
* If keyPattern
is not null then only values mapped by matched keys of this pattern are loaded.
*
* Use org.redisson.client.codec.StringCodec
for Map keys.
*
* Usage example:
*
* Codec valueCodec = ...
* RMapRx map = redissonClient.getMap("simpleMap", new CompositeCodec(StringCodec.INSTANCE, valueCodec, valueCodec));
*
* // or
*
* RMapRx map = redissonClient.getMap("simpleMap", StringCodec.INSTANCE);
*
*
* 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
*
* @see #readAllValues()
*
* @param pattern - key pattern
* @param count - size of values batch
* @return iterator
*/
Flowable valueIterator(String pattern, int count);
/**
* Returns iterator over key set of this map.
* Keys are loaded in batch. Batch size is 10
.
*
* @see #readAllKeySet()
*
* @return iterator
*/
Flowable keyIterator();
/**
* Returns iterator over key set of this map.
* Keys are loaded in batch. Batch size is defined by count
param.
*
* @see #readAllKeySet()
*
* @param count - size of keys batch
* @return iterator
*/
Flowable keyIterator(int count);
/**
* Returns iterator over key set of this map.
* If pattern
is not null then only keys match this pattern are loaded.
*
* Use org.redisson.client.codec.StringCodec
for Map keys.
*
* Usage example:
*
* Codec valueCodec = ...
* RMapRx map = redissonClient.getMap("simpleMap", new CompositeCodec(StringCodec.INSTANCE, valueCodec, valueCodec));
*
* // or
*
* RMapRx map = redissonClient.getMap("simpleMap", StringCodec.INSTANCE);
*
*
* 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
*
* @see #readAllKeySet()
*
* @param pattern key pattern
* @return iterator
*/
Flowable keyIterator(String pattern);
/**
* Returns iterator over key set of this map.
* If pattern
is not null then only keys match this pattern are loaded.
* Keys are loaded in batch. Batch size is defined by count
param.
*
* Use org.redisson.client.codec.StringCodec
for Map keys.
*
* Usage example:
*
* Codec valueCodec = ...
* RMapRx map = redissonClient.getMap("simpleMap", new CompositeCodec(StringCodec.INSTANCE, valueCodec, valueCodec));
*
* // or
*
* RMapRx map = redissonClient.getMap("simpleMap", StringCodec.INSTANCE);
*
*
* 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
*
* @see #readAllKeySet()
*
* @param pattern key pattern
* @param count size of keys batch
* @return iterator
*/
Flowable keyIterator(String pattern, int count);
/**
* Returns RPermitExpirableSemaphore
instance associated with key
*
* @param key - map key
* @return permitExpirableSemaphore
*/
RPermitExpirableSemaphoreRx getPermitExpirableSemaphore(K key);
/**
* Returns RSemaphore
instance associated with key
*
* @param key - map key
* @return semaphore
*/
RSemaphoreRx getSemaphore(K key);
/**
* Returns RLock
instance associated with key
*
* @param key - map key
* @return fairLock
*/
RLockRx getFairLock(K key);
/**
* Returns RReadWriteLock
instance associated with key
*
* @param key - map key
* @return readWriteLock
*/
RReadWriteLockRx getReadWriteLock(K key);
/**
* Returns RLock
instance associated with key
*
* @param key - map key
* @return lock
*/
RLockRx getLock(K key);
/**
* Adds object event listener
*
* @see org.redisson.api.listener.TrackingListener
* @see org.redisson.api.listener.MapPutListener
* @see org.redisson.api.listener.MapRemoveListener
* @see org.redisson.api.ExpiredObjectListener
* @see org.redisson.api.DeletedObjectListener
*
* @param listener object event listener
* @return listener id
*/
Single addListener(ObjectListener listener);
}