Releases: redisson/redisson
redisson-3.29.0
Feature - NewObjectListener
added to track created objects
Feature - NewObjectListener
and SetObjectListener
can be registered with RKeys.addListener()
method
Feature - subscribeOnElements()
, subscribeOnLastElements()
and subscribeOnFirstElements()
methods wait for CompletionStage
to complete before polling a next element
Feature - shardedSubscriptionMode
setting added in Cluster configuration
Feature - RSemaphore.trySetPermits()
method with ttl parameter added
Feature - getDeletedIds()
method added to RStream
AutoClaimResult
object
Improvement - responses map lock replaced with fine-grained entry locking in RRemoteService
and RScheduledExecutorService
Fixed - RStream.autoClaim()
method throws ClassCastException
Fixed - RSearch
aggregate expression applied incorrectly
Fixed - LocalCachedMapDisabledKey
event is parsed incorrectly if local cache used with RTransaction
Fixed - Slave node in cluster mode isn't shutdown properly if readMode = MASTER
and subscribeMode = MASTER
(regression since 3.27.2)
Fixed - race condition during cluster topology update causes slave added/removed events
Fixed - OSGi MANIFEST should define optional dependencies
Fixed - TimeoutException
is thrown if connectionMinimumIdleSize = 0
Fixed - ClassCastException
is thrown for Reactive/Rx RemoteService invocation if Redisson instance isn't Reactive/Rx
Fixed - semaphore object is not deleted after RLocalCachedMap.clearLocalCache()
method invocation
Fixed - AggregationOptions.groupBy()
setting with reducers used in RSearch.aggregate()
method causes an exception
Fixed - AggregationOptions.groupBy()
setting usage with RSearch.aggregate()
method causes an exception if reducers aren't defined
Fixed - AggregationOptions.sortBy()
setting usage with RSearch.aggregate()
method causes an exception
Fixed - resource leak error when executing multiple contains operation of RSet
in transaction (thanks to @wynn5a)
Fixed - jmockit upgraded to 1.52.0 inside maven-surefire-plugin (thanks to @roharon)
redisson-3.28.0
Feature - Multi Sentinel mode implementation
Feature - RLocalCachedMapCacheV2
object implemented with effecient partitioning and advanced entry eviction
Feature - graceful shutdown in quarkus (thanks to @naah69)
Improvement - RLongAdder
and RDoubleAddder
should use sharded topic if possible
Improvement - reduced CPU and Memory consumption by ClusterConnectionManager.getLastPartitonsByURI()
method
Improvement - RedisURI.hashCode()
caching to reduce CPU consumption
Improvement - shutdown check added in RTopic.removeListener()
method
Fixed - incorrect detection of sharded pubsub support
Fixed - RBatch
does not work with RKeys.randomKeyAsync() method (thanks to @wynn5a)
Fixed - unresolved Redis node hostname in cluster mode affects cluster topology scan
Fixed - MASTER
nodes aren't used if readMode = MASTER_SLAVE
Fixed - RLock
, RFencedLock
, RReadWriteLock
miss unlock messages and wait a defined timeout before a next attempt or hang
Fixed - RSemaphore
, RPermitExpirableSemaphore
miss release messages and wait a defined timeout before a next attempt or hang
Fixed - incorrect value of RLongAdder.sum()
and RDoubleAddder.sum()
methods if multiple Adder instances for the same Redisson object are used
Fixed - CountDownLatch.await()
method may throw NPE
Fixed - ExecutionException handling in RExecutorService, RLock, RPermitExpirableSemaphore, RSemaphore objects
Fixed - ConcurrentModificationException
is thrown on RedissonSession save method if readMode = MEMORY
Fixed - Spring Data Redis zPopMin() and zPopMax() methods don't work (thanks to @bimslab)
redisson-3.27.2
Feature - RShardedTopic.countSubscribers()
method implemented
Feature - RedissonMultiLock
implements isHeldByThread()
and isHeldByCurrentThread()
methods
Fixed - Multiple locking of RLock reset remainTimeToLive to config default
Fixed - exception thrown by natMapper
is not shown in logs
Fixed - OSGi jdk.net package import should be optional
Fixed - ServiceManager.resolveAll()
method throws NPE
Fixed - RObject.addListenerAsync()
method throws UnsupportedOperationException
Fixed - StatusListener
doesn't work with RShardedTopic
Fixed - NPE is thrown in cluster mode if slave node added
Fixed - continuously reconnecting to a removed slave node in cluster mode
Fixed - incorrect handling of TrackingListener removal
Fixed - FlushListener
receives duplicate events
Fixed - SlotsDecoder
throws NPE on empty result
Fixed - Clash between RedissonCache and Spring (6.1+) Cache interface methods
Fixed - RedissonClient.shutdown()
method hangs at serviceManager.getShutdownLatch()
invocation
Fixed - "Failed to submit a listener notification task. Event loop shut down?" error caused by PingConnectionHandler
Fixed - JsonCodecWrapper
isn't cached properly
redisson-3.27.1
Feature - added TrackingListener
support to RList
, RQueue
, RDeque
, RBlockingQueue
, RBlockingDeque
, RDelayedQueue
, RRingBuffer
objects
Feature - addListener()
, random()
methods added to RLexSortedSet
object
Improvement - show log warning "DNS TCP fallback on UDP query timeout disabled" if Netty version is lower 4.1.105
Improvement - ChannelName.toString() conversion optimization
Fixed - retryInterval
and retryAttempts
settings aren't applied in case of 'READONLY You can't write against a read only replica.' error
Fixed - RRemoteService
may cause CPU spike after Master failover
Fixed - FlushListener
causes ClassCastException
Fixed - TrackingListener
causes ClassCastException
Fixed - RedissonSetCache.addIfAbsentAsync()
uses incorrect argument for zadd (thanks @fooooxxxx)
redisson-3.27.0
Feature - client tracking support. TrackingListener
is available for RBucket
, RStream
, RScoredSortedSet
, RSet
, RMap
and RBucket
objects
Feature - added RKeys.addListener()
method to register global listeners
Feature - FlushListener
added to track flushdb/flushall command invocation
Feature - Kryo5Codec
constructor with registrationRequired
parameter added
Feature - nettyExecutor
setting added
Feature - enable DNS TCP fallback when UDP query timeout for RoundRobinDnsAddressResolverGroupFactory
and SequentialDnsAddressResolverFactory
Improvement - cache result of INFO REPLICATION
command for RLock
objects
Fixed - Spring Data Redis ReactiveKeyCommands.pExpire()
method throws an exception
Fixed - NPE is thrown by RedisExecutor.handleError()
method
Fixed - sharded pubsub detection for Apache Tomcat Session Manager
, RMapCache
and RLocalCachedMap
objects
Fixed - Redisson's threads aren't shutdown if Redis node address isn't defined
Fixed - NPE is thrown while creating RLocalCacheMap
object without WriteMode value
Fixed - incorrect RESP3 protocol parsing causes SlaveConnectionPool no available Redis entries
error
Fixed - repeated new connections with AWS Elasticache serverless
Fixed - internal LRUCacheMap
object throws ConcurrentModificationException
redisson-3.26.1
Feature - enable DNS TCP fallback on UDP query timeout (thanks to @hellojukay)
Feature - StreamMessageId.autogenerateSequenceId()
method added (thanks to @mrmx)
Feature - RLockReactive.isHeldByThread()
method added (thanks to @sanail)
Fixed - missed implementation of Spring Data Redis ReactiveStringCommands.bitField()
method
Fixed - Spring Data Redis opsForCluster().randomKey()
method throws UnsupportedOperationException
Fixed - JCache.close()
method throws IllegalStateException
if statistics enabled
Fixed - doubled connections to the master node if readMode = MASTER_SLAVE
or there are no slave nodes
Fixed - RSearch.delDict()
and RSearch.addDict()
methods throw NPE
Fixed - connection ping handler doesn't use commandTimeout
setting
Fixed - repeated new connections with AWS Elasticache serverless
Fixed - RLock
throws ERR unknown command 'wait'
with AWS Elasticache serverless
Fixed - RSearchReactive.dropIndex()
method doesn't call onComplete() handler
redisson-3.26.0
Feature - ability to specify retryInterval
, retryAttempts
, timeout
settings per Redisson object. Please refer to the documentation
Feature - LocalCachedMapOptions.expirationEventPolicy
setting added
Feature - StreamAddListener
, StreamCreateConsumerListener
, StreamCreateGroupListener
, StreamRemoveConsumerListener
, StreamRemoveGroupListener
, StreamRemoveListener
, StreamTrimListener
listeners added for RStream
object
Fixed - Spring Data Redis RedissonConnection.setCommands()
method returns null
Fixed - continuously reconnecting to a removed slave node in cluster mode
Fixed - EntryExpiredListener
isn't invoked by RMapCache
instance in Redis Cluster 7+ and if nameMapper
is defined
Fixed - Skipped slave up ...
error is thrown in Sentinel mode if nodes use IPv6
Fixed - NPE is thrown when adding or removing shards in ElastiCache
Fixed - RAtomicDouble
, RAtomicLong
, RMap
, RScoredSortedSet
, RSet
listeners aren't removed properly
Fixed - connection isn't reconnected on WRONGPASS
Redis error
Fixed - connection timeout during Redisson start ignores connections amount
Fixed - RSearch.search()
method doesn't execute query with aliases properly
Fixed - FCALL_RO
command isn't used when RFunction
method called with FunctionMode.READ
parameter
Fixed - IllegalReferenceCountException
is thrown when canceling a method call
Fixed - Redis scan cursor exceed Long.MAX_VALUE
in AWS Elasticache
Fixed - internal ServiceManager.calcSHA()
method should use UTF-8 encoding by default
redisson-3.25.2
Fixed - SSL connection can't be established
redisson-3.25.1
Improvement - JDK21 Virtual Threads compatibility
Fixed - EvictionTask keeps running even after destroy()
method called
Fixed - Sprint Data Redis throws Subscription registration timeout exceeded
Fixed - Sprint Data Redis RedisMessageListenerContainer.addMessageListener()
method hangs if called after container start
Fixed - NPE is thrown if lazyInitialization = true
Fixed - PriorityQueue
methods may hang due to unreleased lock after exception
Fixed - RMap.getAll()
method throws IndexOutOfBoundsException
Fixed - natMapper isn't applied to slaves and master nodes at start in Sentinel mode
Fixed - method invocation hangs after failover if retryInterval = 0
Fixed - transactional Map and MapCache keySet method returns inconsistent state
Fixed - Multilock lock method doesn't work properly with non-MILLISECONDS TimeUnit
redisson-3.25.0
Feature - RESP3 protocol support. protocol setting added
Feature - Spring Data Redis 3.2.0 implementation
Feature - RSetCacheV2, RSetV2 objects with more effecient partitioning in Cluster added in PRO version
Improvement - SLF4j updated to 2.0.9 version
Fixed - RFunction/RScript keys parameter accepts only String values
Fixed - IP address instead of hostname is used in sentinel mode with SSL connection
Fixed - Resources leak in Version.logVersion() method
Fixed - RLiveObjectService.persist() method with varargs hangs in cluster mode
Fixed - Redisson connection process may hang at start in some cases
Fixed - EntryExpiredListener isn't invoked by RMapCache instance in Redis Cluster 7+
Fixed - slave node in sentinel mode can't be recovered if it's a master node
Fixed - JsonJacksonCodec fails to serialize Throwable on Java17 (thanks to @tomjankes)
Fixed - RBlockingDeque.move() throws an exception for empty result
Fixed - RScoredSortedSet.pollFirstEntries(count) and pollLastEntries(count) methods return wrong result
Fixed - BZMPOP command timeout isn't applied
Fixed - getBlockingDeque(), getDeque(), getPriorityDeque(), getPriorityBlockingDeque() throw NoClassDefFoundError if JDK version < 21
Fixed - RLocalCachedMap.containsKey() method does not work properly if storeCacheMiss = true
Fixed - RedissonRemoteService exceptions handling (thanks to @mrmx)
Fixed - RSearch.info() method throws NumberFormatException
Fixed - HttpSessionListener.sessionDestroyed() method isn't called if Tomcat Session deleted by the node which didn't create it
Fixed - LZ4CodecV2 isn't compatible with LZ4Codec
Fixed - RSearch GroupBy.reduce alias isn't applied (thanks to @arjunE1395)