redisson-3.51.0
Feature - RBitSet.diff()
, diffInverse()
, andOr()
, setExclusive()
methods added
Feature - FieldIndex.svsVamanaVector()
vector indexing added (thanks to @seakider)
Feature - checkMasterLinkStatus
setting added for Cluster mode (thanks to @seakider)
Feature - RKeys.migrate()
method added with auth support (thanks to @lyrric)
Feature - added support of KEEPREF, DELREF and ACKED options to RStream.trim()
method (thanks to @seakider)
Feature - added support of KEEPREF, DELREF and ACKED options to RStream.add()
method (thanks to @seakider)
Feature - new FIRST_PRIMARY_PUBSUB_NOTIFICATION mode added to Multi Cluster primaryDiscoveryMode
setting
Feature - new metrics "responses.busy", "responses.wait", "responses.tryagain", "responses.loading", "responses.ask", "responses.moved" added
Improvement - AbstractCacheMap.removeExpiredEntries()
method optimization (thanks to @lyrric)
Improvement - equals/hashcode implementation added to TransactionOptions
Improvement - Cluster manager uses IP if hostname can't be resolved (thanks to @seakider)
Improvement - new API for RStream.range()
, RStream.rangeReversed()
and RStream.listPending()
methods (thanks to @seakider)
Fixed - RReliableQueue
message reached delivery limit isn't removed and moved to deadLetterQueue
Fixed - visibility setting isn't applied if defined in RReliableQueue
queue config
Fixed - license key can't be read if defined as JVM option
Fixed - RClusteredLocalCachedMapCache.putIfAbsent()
method sends incorrect local cache update date (regression since 3.49.0)
Fixed - RLocalCachedMapCacheV2.fastPutIfExists()
method doesn't work (regression since 3.49.0)
Fixed - SyncStrategy.UPDATE
doesn't work for RLocalCachedJsonStore
Fixed - RClusteredLocalCachedMap.putIfAbsent()
and fastPutIfAbsent()
methods don't update the local cache if storeCacheMiss = true
Fixed - RClusteredLocalCachedMap.putIfExists()
method doesn't update the local cache if storeCacheMiss = true
Fixed - RClusteredLocalCachedMapCache.putIfExists()
and putIfAbsent()
methods doesn't update the local cache if storeCacheMiss = true
Fixed - RClusteredLocalCachedMapCache.fastPutIfExists()
, putIfExists()
, putIfAbsent()
and fastPutIfAbsent()
methods don't update the local cache if storeCacheMiss = true
Fixed - RClusteredLocalCachedMapCacheNative.fastPutIfExists()
, putIfExists()
, putIfAbsent()
and fastPutIfAbsent()
methods don't update the local cache if storeCacheMiss = true
Fixed - RReliableQueue.get(Codec, String)
method doesn't work
Fixed - Multi Cluster mode doesn't detect failed clusters
Fixed - null is printed in logs during connection in Cluster mode
Fixed - RBitSet.and()
, not()
, or()
, xor()
methods return void instead of number
Fixed - RScheduledExecutorService.deregisterWorkers()
method throws an exception (thanks to @seakider)
Fixed - RLocalCachedMap.putIfExists()
method doesn't update the local cache if storeCacheMiss = true
Fixed - RLocalCachedMap.putIfAbsent()
method doesn't update the local cache if storeCacheMiss = true
Fixed - IllegalReferenceCountException
is thrown when using RClientSideCaching
(thanks to @seakider)
Fixed - failed Slave at Redisson start moment can't be discovered later in Cluster mode
Fixed - INFO REPLICATION
command timeout logging
Fixed - graalvm: Classes that should be initialized at run time got initialized during image building (thanks to @seakider)
Fixed - DNSMonitor
logs a warning (thanks to @seakider)
Fixed - race condition during elements eviction in LFU cache (thanks to @lyrric)
Fixed - when acquire by RPermitExpirableSemaphore it may fail in some case (thanks to @lyrric)
Fixed - Direct byte buffer leak when using RLocalCachedMap
with StoreMode.LOCALCACHE
for readAllValues()
, readAllMap()
and readAllEntrySet()
methods (thanks to @lyrric)
Fixed - DataInputStream closing to prevent resource leak in RedissonExecutorService.getClassBody()
method (thanks to @backstraw)
Fixed - added missed setters and getters for Config object in RedissonSessionManager
(thanks to @jglapa)
Fixed - RPermitExpirableSemaphore.tryAcquire()
doesn't work when acquiring > 1 permit (thanks to @lyrric)
Fixed - CommandMapper
isn't applied properly to RScript
object (thanks to @lyrric)
Fixed - synchronization of remote and local Tomcat SSO cache (thanks to @cogniware)
Fixed - FT.SEARCH
command is executed only on master nodes (thanks to @pfyod)
redisson-3.50.0
Feature - Apache Tomcat SSO integration (thanks to @cogniware and @iamrakesh)
Feature - Valkey and Redis url may contain password only (thanks to @noxvost)
Fixed - Redisson can't connect to Azure Managed Redis Cluster (thanks to @beetlebugorg)
Fixed - commons-codec and json-smart libs updated
Fixed - IllegalArgumentException: tickDuration : 0 (expected: > 0) error is thrown
redisson-3.49.0
Feature - RClusteredScoredSortedSetRx
, RClusteredScoredSortedSetReactive
interfaces added for RClusteredScoredSortedSet
object
Feature - iteratorAsync()
methods added to RSet
object (thanks to @seakider)
Feature - readAllKeySetAsync(pattern)
, readAllValuesAsync(pattern)
and readAllEntrySetAsync()
methods added to RMap interface (thanks to @seakider)
Feature - Redisson PRO license key can be defined through redisson.pro.key
key stored in Valkey or Redis
Fixed - local cache update in putIfAbsent()
, fastPutIfExists()
and fastPutIfAbsent()
methods of RLocalCachedMapCache
and RClusteredLocalCachedMapCache
objects
Fixed - RLocalCachedMapCacheNative
object in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RLocalCachedMapCacheNative.putIfAbsent()
method doesn't update local cache
Fixed - RClusteredLocalCachedMapCacheNative
object in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RClusteredLocalCachedMapCacheNative.putIfAbsent()
method doesn't update local cache
Fixed - RClusteredLocalCachedMapCache
object in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RLocalCachedMapCache
object in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - put()
, fastPutIfAbsent()
, putIfAbsent()
methods of RLocalCachedMapCacheV2
in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RLocalCachedJsonStore
object in storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - missed classes added to the Hibernate 7 module
Fixed - retryAttempts
setting value limit (thanks to @seakider)
Fixed - RObject.rename()
method doesn't work in batch mode if the new and old name slots match
Fixed - minTimeout value calculation for HashedWheelTimer object
Fixed - codec
, loader
and writer
settings can't be parsed in Micronaut cache yaml configuration
Fixed - environment variables for Redisson configuration can't be used with Micronaut 4
redisson-3.48.0
Feature - retryDelay
and reconnectionDelay
settings added, allowing to define a delay strategy. Available implementations: FullJitterDelay
, EqualJitterDelay
, DecorrelatedJitterDelay
and ConstantDelay
. Default is EqualJitterDelay
Feature - Vector Set object added
Feature - Spring Data Redis 3.5.0 implementation
Feature - Hibernate 7 support added
Improvement - RClusteredMapCache
eviction process optimization
Fixed - RLocalCachedMap
with storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RClusteredLocalCachedMap
with storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RLocalCachedMapCacheV2
with storeMode = LOCALCACHE
may allocate extra connections and miss updates if syncStrategy = UPDATE
Fixed - RLocalCachedMapCacheV2
local cache updates
Fixed - QueueTransferTask
throws NPE
Fixed - unknown command error is thrown if RLock
object is used on Valkey Serverless deployment
Fixed - the count parameter of RMap.valuesAsync()
method should not affect result
Fixed - NOSCRIPT
error is thrown after failover by RLock
methods
Fixed - RESP3 boolean value parsing
redisson-3.47.0
Feature - ReliableFanout object added
Feature - processingMode setting added to RReliableQueue
config
Feature - listeners added to RReliableQueue
object
Feature - metrics added to RReliableQueue
object
Feature - disableOperation()
and enableOperation()
methods added to RReliableQueue
object
Feature - get()
and getAll()
methods added to RReliableQueue
object
Feature - pollBatchSize
, visibilityTimeout
, negativeAcknowledgeDelay
consumer settings added to Spring Cloud Stream Binder
Feature - RReliableQueue
implements RDestroyable
interface
Feature - readDiffEntries()
, readIntersectionEntries()
, readUnionEntries()
methods added to RScoredSortedSet (thanks to @seakider)
Feature - valkeyCapabilities
setting added
Improvement - script logging in error message if useScriptCache = true
Improvement - RReliableQueue
data structure optimization
Fixed - RClusteredLocalCachedMap.fastPut() method causes netty buffer leak if storeMode = LOCALCACHE
Fixed - RReliableQueue.size()
method result shouldn't include delayed messages amount
Fixed - Spring Cache.getNativeCache() returns incorrect instance
Fixed - exessive connections creation for RClusteredLocalCachedMap and RClusteredLocalCachedMapCache if 'reconnectionStrategy = LOAD'
Fixed - readUnion(), readIntersection(), readDiff() methods of RSetCache throw exception
Fixed - New connection opened for each write operation after failover in Sentinel mode (thanks to @seakider)
Fixed - Micronaut 4.x connects only to a single node
Fixed - RedisURI(String) constructor doesn't set the hashCode
Fixed - Spring Data Redis addMessageListener()
method hangs if multiple listeners added to the same topic or pattern
Fixed - detection of WAIT
and WAITAOF
commands availability
Fixed - JCacheManager does not remove cache instance from map when calling closeCache() (thanks to @seakider)
Fixed - starvation of pub/sub connections may cause a memory leak
Fixed - RMap.loadAll()
method may hang in Cluster
Fixed - None of slaves were synced
exception is thrown
Fixed - Spring Data Redis ReactiveZSetCommands.zadd()
default param (thanks to @lookroot)
redisson-3.46.0
Feature - Reliable Queue object added. RDelayedQueue
and RBoundedBlockingQueue
have been deprecated
Feature - fairLockWaitTimeout
Redisson setting added (thanks to @seakider)
Feature - credentialsReapplyInterval
Redisson setting added (thanks to @seakider)
Feature - support for JDK Atomic objects in Kryo5Codec (thanks to @bergander)
Feature - WorkerOptions.tasksInjector
setting added (thanks to @zzhlhc)
Breaking change - Spring Cloud Stream Binder queue implementation replaced with RReliableQueue
object
Breaking change - RedisPubSubConnection.removeListener() and RedisPubSubConnection.addListener() methods signature changed
Improvement - useScriptCache
setting is true by default
Improvement - Add check for keepAliveTime
and rateInterval
in RRateLimiter (thanks to @shrink)
Fixed - data leak in RReliableTopic (thanks to @Chengzhi1803472613)
Fixed - PubSub stops working after Redis restart in sentinel mode (thanks to @seakider)
Fixed - CommandAsyncService.syncedEval()
method doesn't update correctly available secondary nodes
Fixed - expire-after-write
and expire-after-access
settings aren't applied to async Micronaut Cache
Fixed - RBatch
exception object doesn't contain suppressed exceptions
Fixed - RRemoteService
fails to operate if codec defined as an anonymous inner class
Fixed - Watchdog fails to renew on reentry locks (thanks to @seakider)
Fixed - RKeys.unlinkByPattern()
and RKeys.deleteByPattern()
methods don't handle keys with non-ASCII characters
Fixed - RenewalTask
throws IndexOutOfBoundsException
redisson-3.45.1
Fixed - Issue with asynchronous Micronaut @Cacheable methods (thanks to @seakider)
Fixed - RExecutorService.submitAsync()
throws a script error (thanks to @seakider)
Fixed - isSlaveNotUsed()
method isn't called if a new slave node added to Redis Cluster (thanks to @seakider)
Fixed - error thrown by RLiveObject running with AWS ElastiCache Serverless Valkey
Fixed - RLocalCachedMap
SYNC strategy doesn't work with fastPutIfExists()
, fastPutIfAbsent()
methods (thanks to @seakider)
Fixed - RDelayedQueue
object cannot get anything when server run a long time (thanks to @seakider)
Fixed - LockEntry throws NPE
Fixed - Hibernate region_prefix
configuration doesn't apply to key redisson-hibernate-timestamp
(thanks to @seakider)
Fixed - MasterConnectionPool
might throw an NPE
Fixed - Inconsistent MaxInactiveInterval Setting in Sessions in multi-node (thanks to @seakider)
Fixed - Out of Memory error
Fixed - a new attempt should be made on ERR WAIT
error during failover (thanks to @seakider)
redisson-3.45.0
Feature - added max-size
setting for Quarkus Cache
Feature - RedissonSpringCacheV2Manager
and RedissonSpringLocalCachedCacheV2Manager
support maxSize setting
Feature - RedissonRegionV2Factory
and RedissonLocalCachedV2RegionFactory
in Hibernate support eviction.max_entries setting
Feature - RedissonCacheV2
and RedissonLocalCachedCacheV2
in MyBatis support maxSize
settings
Feature - maxSize
setting support by redisson.caches-v2.*
and redisson.local-caches-v2.*
cache configurations in Micronaut
Feature - RMapCacheV2.setMaxSize()
method added
Feature - RClusteredLocalCachedMapCacheNative
object added with data partitioning, local cache and native eviction
Feature - RedissonClusteredSpringLocalCachedCacheNativeManager
object added with data partitioning, local cache and native eviction
Feature - added Micronaut redisson.clustered-local-caches-native.*
cache with data partitioning, local cache and native eviction
Feature - added Hibernate RedissonClusteredLocalCachedNativeRegionFactory
cache with data partitioning, local cache and native eviction
Feature - added Quarkus CLUSTERED_LOCALCACHE_NATIVE
cache with data partitioning, local cache and native eviction
Feature - added MyBatis RedissonClusteredLocalCachedCacheNative
cache with data partitioning, local cache and native eviction
Feature - added JCache implementation with local cache and advanced eviction
Feature - added JCache implementation with local cache and native eviction
Feature - added JCache implementation with data partitioning, local cache and native eviction
Feature - ability to set eviction mode via Spring CacheConfig
object (thanks to @JKord)
Feature - RBitSet.get(long...) method added (thanks to @seakider)
Feature - RBlockingQueue.pollLastFromAnyWithName() method added (thanks to @seakider)
Feature - getReferenceCount(), getAccessFrequency(), getInternalEncoding() methods added to RObject interface (thanks to @seakider)
Feature - RExecutorService.deregisterWorkers() method added
Feature - valuesAsync()
and entrySetAsync
methods added to RMap
interface (thanks to @seakider)
Improvement - validate PARAMS in RSearch.search()
method (thanks to @seakider)
Fixed - delete() method doesn't work in non-clustered mode for RLocalCachedJsonStore
, RLocalCachedMapCacheV2
objects
Fixed - clustered local cached JCache doesn't use storeCacheMiss
setting
Fixed - JCache with native and advanced eviction don't work in cluster mode
Fixed - clustered local cached JCache.put()
method may throw a CROSSLOT error
Fixed - put()
method of local cached JCache instance may not update local cache
Fixed - remove()
and removeAll()
methods of local cached JCache instance don't update the local cache of other instances
Fixed - putAll()
and clear()
methods of JCacheV2 may not work
Fixed - RedissonClusteredSpringCacheNativeManager
properties validation
Fixed - RedissonSpringLocalCachedCacheV2Manager
properties validation
Fixed - RedissonSpringLocalCachedCacheNativeManager
can't be created using a yaml configuration file
Fixed - RedissonSpringLocalCachedCacheNativeManager
throws an ClassCastException
if cache wasn't defined in the configuration
Fixed - RLocalCachedMapCache.getAll()
method may return an incorrect result
Fixed - RLocalCachedMapCacheNative.getAll()
method may return an incorrect result
Fixed - missed implementation of expireEntriesIfNotSet()
, expireEntriesIfLess()
and expireEntriesIfGreater()
methods of RClusteredMapCacheNative
Fixed - missed implementation of expireEntriesIfLess()
and expireEntriesIfGreater()
methods of RLocalCachedMapCacheNative
Fixed - RJsonStore.isExists()
method doesn't work
Fixed - JCacheV2 entry name generation fixed
Fixed - RMapCacheV2.isExists()
method optimization
Fixed - RedissonSpringLocalCachedCacheV2Manager
throws an ClassCastException if cache wasn't defined in the configuration
Fixed - RedissonSpringLocalCachedCacheV2Manager
can't be created using a yaml configuration file
Fixed - RLocalCachedMapCacheV2
, RLocalCachedJsonStore
, RSetV2
, RSetCacheV2
, JCacheV2
, RMapCacheV2
don't work if useScriptCache = true
Fixed - LUA error when RedissonMapCache.putAll(Map)
is invoked with listeners (thanks to @max.huang)
Fixed - ProtobufCodec
compatibility with the latest protobuf version (thanks to @zzhlhc)
Fixed - RFairLock
attempt to compare nil with number (thanks to @seakider)
Fixed - incorrect parsing of PubSubType.UNSUBSCRIBE
command with non-English locale
Fixed - RRemoteExecutorService
expiration
sorted set is growing indefinitely (thanks to @seakider)
Fixed - Quarkus shutdown process fails if version 3.18 or higher
Fixed - notifyUpdate()
and notifyInvalidate()
methods of LocalCacheListener
might throw NPE
Fixed - RBatchRx
may work incorrectly if useScriptCache = true
redisson-3.44.0
Feature - native eviction implemented for JCache API
Feature - advanced eviction implemented for JCache API
Feature - RKeyAsync.getKeysAsync()
method added (thanks to @seakider)
Feature - added commandsMap
setting to CommandsLoadBalancer
object
Feature - added regex
setting to RandomLoadBalancer
and RoundRobinLoadBalancer
objects to filter nodes
Feature - Unix Domain Socket (UDS) support for a single mode through "redis+uds://" or "valkey+uds://" scheme
Feature - lockWatchdogBatchSize
setting added
Fixed - RBuckets.get()
method doesn't use nameMapper in single mode
Fixed - valkeys
scheme can't be used in Sentinel mode
Fixed - closed channel detection during connection ping process
Fixed - RSearch throws an error if nocontent param defined (thanks to @seakider)
Fixed - RemovedListener
is invoked incorrectly by JCache.getAll()
method
Fixed - synthetic class shouldn't be allowed to be used as a comparator for RPriorityQueue
objects
Fixed - master node address isn't resolved through NatMapper object in Sentinel mode (tnanks @aramperes)
Fixed - STOPWORDS 0 can't be defined during RSearch index creation
Fixed - RScript.evalSha()
method doesn't work in cluster mode
Fixed - task id duplication check added to RScheduledExecutorService
methods Fixed - failover handling in Sentinel mode
Fixed - Micronaut Session.put()
method doesn't remove an entry if value = null
Fixed - RReadWriteLock.unlock()
method doesn't respect the lock owner
redisson-3.43.0
Feature - RObservable
interface for listeners added for RLock objects (thanks to @seakider)
Fixed - RExecutorService
workers stop working (regression since 3.42.0) (thanks to @seakider)
Fixed - RLocalCacheMap.remove()
method hangs if called inside a transaction
Fixed - poll methods of RTimeSeries
and RScoredSortedSet
objects return null instead of empty lists
Fixed - RSet.containsEach()
method returns null instead of empty list
Fixed - RLocalCachedMap.fastRemove()
method may throw NPE if storeMode = LOCALCACHE