Redisson - Easy Redis Java client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...
Feature - Helidon 4.0 integration
Fixed - ERR invalid expire time
error is thrown during RLock.unlock()
call if retryAttempts = 0
Fixed - IllegalArgument timeout...
error is throw during Redisson shutdown
Fixed - Intermittent Exception when creating RLocalCachedMap
(regression since 3.24.1)
Fixed - RSearch.aggregate()
doesn't apply withCursor()
and sortBy()
options correctly
Fixed - MOVED redirection loop detected
error should be thrown only if both source and target addresses are equal
Feature - writerRetryAttempts
and writerRetryInterval
settings added to MapOptions
object (thanks to @zzhlhc)
Feature - RSortedSet
implements RExpirable
Feature - RBlockingQueue.pollFromAnyWithName()
method added
Feature - org.redisson.codec.LZ4CodecV2
codec based on apache commons-compress added
Feature - Redis Cache async methods implementation introduced in Spring 6.1.0
Feature - tcpKeepAliveCount
, tcpKeepAliveIdle
, tcpKeepAliveInterval
, tcpUserTimeout
settings added
Feature - subscriptionTimeout
setting added
Fixed - RedissonClient.shutdown()
method should be completed within timeout (thanks @dgolombek)
Fixed - RBuckets.trySet()
, RBuckets.set()
, RBuckets.get()
, RKeys.touch()
, RKeys.unlink()
, RKeys.delete()
, RKeys.countExists()
methods may hang after failover in Redis cluster
Fixed - exceptions aren't wrapped in CacheException
for containsKey()
, getAll()
and removeAll()
methods of JCache
Fixed - Command execution timeout for command: (PING)
Fixed - RBucketReactive.delete()
method doesn't work in Quarkus Native mode (thanks to @DicksengA)
Fixed - auto configuration with Spring Boot 2.7.x+
Fixed - RSortedSet
doesn't work correctly if NameMapper
object was specified
Fixed - RPriorityQueue
has incorrect lock name if NameMapper
object was specified
Fixed - RMapCache.expireEntries()
and expireEntry()
methods don't update maxIdle
parameter properly
Fixed - non-volatile RedisConnection.lastUsageTime
field may cause incorrect idle time calculation
Fixed - attempt to unlock lock, not locked by current thread
error occurs in rare cases even if RLock.unlock()
method called by lock owner thread
Fixed - RCountDownLatch
only notifying the first async listener after countdown reaches 0 (thanks to @Sinbios)
Fixed - RStream.trim()
and trimNonStrict()
methods don't work with Redis 6.2+
Fixed - RReadWriteLock.readLock().isLocked()
method returns incorrect result if acquired by writeLock owner thread
Fixed - RedissonClient.getLiveObjectService()
method causes an attempt to connect to Redis if lazyInitialization = true
Feature - failedSlaveNodeDetector
setting added to Cluster, Sentinel, Replicated, Master/Slave modes
Feature - module name added to redisson jar (thanks to @KrogerWalt)
Feature - putAll()
method with TTL added to RMapCacheRx and RMapCacheReactive objects
Feature - Fallback to TCP in case of a UDP DNS truncation
Feature - RMapCacheV2
, Spring RedissonSpringCacheV2Manager
and Hibernate RedissonRegionV2Factory
objects added in PRO version
Fixed - NPE is thrown by RedissonAutoConfiguration
if Spring Boot 3.1+
Fixed - WeightedRoundRobinBalancer
doesn't support hostnames
Fixed - NPE is thrown by CommandPubSubDecoder in rare cases
Fixed - during connection initialization a new attempt isn't made for Busy, ClusterDown, TryAgain and Wait Redis errors
Fixed - RJsonBucket.getType()
method throws NPE if type is null
Fixed - IllegalStateException
is thrown if RedisConnectionDetails
object registered in Spring Context with settings for Cluster or Sentinel
Fixed - RSearch
can not create Vector field
Fixed - RSearch
vector field doesn't support alias
Feature - methods for multiple permits support added to RPermitExpirableSemaphore
object (thanks to @ikss)
Feature - ProtobufCodec
codec added (thanks to @dumbbell-5kg)
Feature - WAITAOF
command support through BatchOptions.syncAOF()
setting
Feature - bgSave()
, scheduleBgSave()
, save()
, getLastSaveTime()
, bgRewriteAOF()
, size()
methods added to RedisNode
object
Improvement - RSemaphore
and RLock
operations should have slave synchronization even if readMode = MASTER
and subscriptionMode = MASTER
Fixed - wrong order call of RSearch's FieldIndex
tag caseSensitive()
and separator()
settings
Fixed - RedisConnectionDetails
object isn't used for Redisson configuration in Spring Boot 3.1+
Fixed - incorrect slots added
,slots removed
messages in Redis Cluster mode
Fixed - Tomcat Manager "Session can't be found" message should have debug level
Fixed - RBoundedBlockingQueue
can't be deleted if nameMapper
was defined
Fixed - RLock
isn't unlocked after RTransaction.commit()
Feature - TransportMode.IO_URING
added (thanks to @sgammon)
Feature - LocalCachedMapOptions.useKeyEventsPattern()
setting introduced
Improvement - Long as string cache in CommandEncoder (thanks to @tomerarazy)
Improvement - each AddressResolver
created by SequentialDnsAddressResolverFactory
should share common DnsCache and DnsCnameCache instances
Improvement - RedisURI optimization (thanks to @ikss)
Fixed - codec errors during Quarkus native build
Fixed - extra subscription topic allocation by RLocalCachedMap
object (regression since 3.23.2)
Feature - Micronaut 4.0 integration
Improvement - PubSub channels should be reconnected back to Slave from Master node if SubscriptionMode = SLAVE
Fixed - Setting retryAttempts
to 0 causes an exception (regression since 3.23.1)
Fixed - RTopic
subscribes only to a single master in cluster if __keyspace
or __keyevent
channel is defined
Fixed - SlaveConnectionPool no available Redis entries
error may arise in some cases
Fixed - StackOverflowError is thrown by AggregationOptions.groupBy()
method
Fixed - failedSlaveCheckInterval
value should be greater than zero before it can be applied
Fixed - RedissonLocalCachedMap.putAllOperation()
method throws ClassCastException
if SyncStrategy = UPDATE
Improvement - the scope of key event subscriptions reduced for RLiveObjectService
object. Now it uses key-space channel
Improvement - the scope of key event subscriptions reduced for RLocalCachedMap
object. Now it uses key-space channel
Fixed - codecs defined via Spring Native application.properties file can't be recognized during application run
Fixed - retryAttempt
setting isn't applied during Redisson startup
Fixed - Quarkus 2/3 native image can't be built
Fixed - unknown property quarkus.redisson.*
warnings in quarkus
Fixed - Redisson settings defined in Quarkus application.properties file can't be used in native mode
Feature - added RBloomFilter
contains()
and add()
methods with element collection support
Feature - RMapCache and RLocalCachedMap should use sharded pubsub in Redis Cluster 7.0+
Feature - lazyInitialization setting added
Feature - expireEntryIfNotSet()
, expireEntries()
, expireEntry()
, expireEntriesIfNotSet()
methods added to RMapCache
object
Feature - MapCacheOptions
object with removeEmptyEvictionTask()
setting introduced. Removes RMapCache
eviction task from memory if map is empty upon entries eviction process completion
Breaking change - RMapCache and RLocalCachedMap should use sharded pubsub in Redis Cluster 7.0+
Breaking change - RMapCache object uses MapCacheOptions object
Improvement - RMapCache
shouldn't emit events if no listeners added
Fixed - canceling tasks that scheduled with cron expression does not interrupt the thread (thanks to @zcxsythenew)
Fixed - RExecutorService
task response should be deleted if task was canceled
Fixed - RedisConnection.close()
method has private visibility
Fixed - ConcurrentModificationException
occasionally thrown during batch execution
Fixed - StringIndexOutOfBoundsException
is thrown if Redis port isn't defined in configuration
Fixed - missed methods implementation of Spring Data Redis module: zRevRangeByLex()
, time(TimeUnit)
, zRemRangeByLex()
, zLexCount()
, rewriteConfig()
, zRangeStoreByLex()
, zRangeStoreRevByLex()
, zRangeStoreByScore()
, zRangeStoreRevByScore()
, flushDb()
, flushAll()
, replicaOf()
, replicaOfNoOne()
Fixed - transactional RMap.fastRemove()
method throws UnsupportedOperationException
Fixed - RBloomFilter
contains()
and add()
methods don't return accurate results if false probability is high
Fixed - incorrect handling "unknown command" response for RTopic
operations
Fixed - RLiveObjectService.delete(class, id)
method doesn't delete indexes
Fixed - RMultimapCache
throws an exception if entry removed before expiration moment
Fixed - keepPubSubOrder
setting isn't applied
Feature - Apache Tomcat Manager should use sharded pubsub in Redis Cluster 7.0+
Feature - Micronaut Session store should use sharded pubsub in Redis Cluster 7.0+
Feature - RClusteredScoredSortedSet object implemented
Feature - maxDeletedEntryId
, entriesAdded
, recordedFirstEntryId
properties added to StreamInfo
object
Feature - inactive
property added to StreamConsumer
object
Feature - LocalCachedMapOptions.cacheSize = -1
should disable local cache storage
Breaking change - Apache Tomcat Manager and Micronaut Session store now use sharded PubSub in Redis Cluster 7.0+
Fixed - map index entry isn't deleted when RLiveObjectService
expires
Fixed - RMultimap.fastRemoveValue()
method doesn't delete entry completely if no values retain
Fixed - Default getCache method checks for Object class equality (thanks @agupta-hw)
Fixed - RScoredSortedSet.distributedIterator()
doesn't work (regression since 3.21.0)
Fixed - Memory leak if RLocalCachedMap
created with storeMode=LOCALCACHE
and syncStrategy=UPDATE
params
Fixed - wait time handling in RedissonSpinLock (thanks @vladimirkl)
Fixed - java.lang.ClassCastException is thrown by RDequeReactive.pollLast() and RDequeReactive.pollFirst() methods (thanks @wynn5a)
Fixed - RSearch.search()
method throws "Parameters must be specified in PARAM VALUE pairs" error
Fixed - RRateLimiter.setRate()
method does not behave as expected when RateType is pre_client (thanks @wynn5a)
Fixed - collection fields aren't deleted when RLiveObject
expires or is deleted