All Versions
Latest Version
Avg Release Cycle
27 days
Latest Release

Changelog History
Page 1

  • v3.18.1 Changes

    🔋 Feature - Spring Data Redis 3.0.0 module added

    🛠 Fixed - PubSub subscription in cluster sometimes doesn't apply to all nodes
    🛠 Fixed - command replies don't match if connection pool size < 10 and at least one command failed
    🛠 Fixed - RLock throws CancellationException continuously
    🛠 Fixed - None of slaves were synced error is thrown after failover during RLock acquisition
    🛠 Fixed - AWS Elasticache cluster failover
    🛠 Fixed - hRandFieldWithValues() and hRandField() methods of Spring Data Redis module throw ClassCastException
    🛠 Fixed - trySetPermitsAsync() method of RPermitExpirableSemaphore object shouldn't allow to overwrite the number of permits if value == 0 (thanks @kscaldef)
    🛠 Fixed - RKeys object doesn't use nameMapper
    🛠 Fixed - connection leak after master failover

  • v3.18.0 Changes

    🔋 Feature - Tomcat 10.1.x support
    🔋 Feature - labels support for RTimeSeries object
    🔋 Feature - compatibility with Spring Boot 3 (thanks @olivierboudet)
    🔋 Feature - RxJava and Reactive interfaces for RLocalCachedMap object
    🔋 Feature - local cache support for JsonBucket object

    👌 Improvement - StringCodec now implements JsonCodec

    🛠 Fixed - RDoubleAdder and RLongAdder objects don't work with nameMapper
    🛠 Fixed - RBlockingQueue methods should return null if negative timeout defined
    🛠 Fixed - RLocalCachedMap.clearLocalCacheAsync() method shouldn't retain semaphore after invocation
    🛠 Fixed - Spring Data Redis methods weren't implemented: zRandMember(), zRandMemberWithScore(), zPopMin(), bZPopMin(), zPopMax(), bZPopMax(), zMScore(), zDiff(), zDiffWithScores(), zDiffStore(), zInter(), zInterWithScores(), zUnion(), zUnionWithScores(), hRandField(), hRandFieldWithValues(), copy(), lMove(), bLMove(), lPop(), rPop(), sMIsMember(), getEx(), getDel()
    🛠 Fixed - attempts to connect to the failed master after failover in cluster mode
    🛠 Fixed - RMapCache MapEntryListener doesn't work with nameMapper
    🛠 Fixed - RJsonBucket.getKeys() method doesn't use path parameter
    🛠 Fixed - RRateLimiter.getConfig().getRate() throws NPE if it doesn't exist (thanks @Tanky-Zhang)
    🛠 Fixed - RTransaction objects should be the same instances on each "get..." call
    🛠 Fixed - RScheduledExecutorService cron triggers fire continuously for hours for some time zones (regression since 3.16.5)
    🛠 Fixed - RSortedSet.add() throws NPE (thanks @yuwei)
    🛠 Fixed - RKeysReactive.getKeysByPattern() method isn't giving all entries if downstream consumer is slow
    🛠 Fixed - "Unable to unfreeze entry" errors in sentinel mode
    🛠 Fixed - JsonBucket.compareAndSet() method with null as update value deletes whole object
    🛠 Fixed - Redis Cluster topology scanned partially in case of DNS resolution error
    🛠 Fixed - Slave nodes failed to pass complete initialization shouldn't be added as nodes
    🛠 Fixed - ByteBuf leaks when one of multiple parameters can't be encoded
    🛠 Fixed - SearchDomainUnknownHostException is thrown occasionally

  • v3.17.7 Changes

    👌 Improvement - Failed connection ping isn't taken in account in Redis slave health check

    🛠 Fixed - RScheduledExecutorService cron expression doesn't support year
    🛠 Fixed - replaceValues() method of RListMultimap and RSetMultimap throws exception for empty collection
    🛠 Fixed - RedissonBaseLock throws NPE after failover
    🛠 Fixed - Spring Data Redis evalsha() method doesn't use key for Redis node routing in Cluster mode
    🛠 Fixed - DNS change isn't detected in replicated mode
    🛠 Fixed - RCollectionReactive.addAll() method is executed without subscription
    🛠 Fixed - RKeysAsync.countExists() method throws errors in cluster mode
    🛠 Fixed - Spring Data Redis reactive setIfAbsent should return false on error (thanks @zhuangzibin)
    🛠 Fixed - Micronaut native image configuration
    🛠 Fixed - RBatchReactive execution stuck forever if useScriptCache = true
    🛠 Fixed - NameMapper is applied incorrectly to RBoundedBlockingQueue object
    🛠 Fixed - incorrect IPv6 conversion
    🛠 Fixed - Spring Boot Module ignores username parameter set via Spring Redis config
    🛠 Fixed - SpringBoot yaml configuration parsing errors shouldn't be suppressed

  • v3.17.6 Changes

    🔋 Feature - Helidon 3.0 support
    🔋 Feature - ability to specify MapWriterAsync and MapLoaderAsync in MapOptions object

    👌 Improvement - log output string expanded to 1000 characters by default

    🛠 Fixed - RBuckets methods don't use nameMapper
    🛠 Fixed - PingConnectionHandler should close channel on RedisLoadingException, RedisTryAgainException, RedisClusterDownException, RedisBusyException
    🛠 Fixed - Invocation timeout isn't applied for RTopic.removeListenerAsync() methods
    🛠 Fixed - WriteBehind task isn't stopped after RMap.destroy() method invocation
    🛠 Fixed - Connection pinging works incorrectly if new connections were created in pool
    🛠 Fixed - "SlaveConnectionPool no available Redis entries" error occurs in Cluster caused by early excluding of master node from nodes for reading
    🛠 Fixed - Permanent blocking calling threads

  • v3.17.5 Changes

    🔋 Feature - touch(), unlink() and delete() methods implemented for transactional RSetCache and RSet objects
    🔋 Feature - transactional RBucket, RMap, RMapCache, RSetCache, RSet objects support expire(), expireAt() and clearExpire() methods
    🔋 Feature - ExecutorOptions.idGenerator() setting added
    🔋 Feature - methods with task id added to RExecutorService interface

    🛠 Fixed - duplicate subscriptions with RedisMessageListenerContainer in Spring Data Redis 2.7
    🛠 Fixed - NameMapper applied twice to transactional RBucket
    🛠 Fixed - some Quarkus environment variables clear all Redisson properties set through config file
    🛠 Fixed - RJsonBucket.delete() method doesn't work
    🛠 Fixed - RExecutorService.submitAsync(Callable, long, TimeUnit) method throws ClassCastException (thanks @xyqshi) 🛠 Fixed - Lock synced slaves check
    🛠 Fixed - reactive scripting commands throw ClassCastException if result is list of list
    🛠 Fixed - RBatch.getJsonBucket() method should return RJsonBucketAsync interface

  • v3.17.4 Changes

    🔋 Feature - RJsonBucket object added for JSON.* commands support
    🔋 Feature - RFunction and RShardedTopic objects added to RBatch

    🛠 Fixed - continuous "Unable to unfreeze entry" error in Sentinel mode
    🛠 Fixed - nameMapper setting isn't applied to RExecutorService and RScheduledExecutorService
    🛠 Fixed - channel write exception may lead to wrong commands order
    🛠 Fixed - don't connect to sentinel resolved by DNS if it's not included in result of SENTINEL SENTINELS command
    🛠 Fixed - RScript.load() method shouldn't use failed Redis nodes
    🛠 Fixed - RPermitExpirableSemaphore.acquireAsync() method hangs until leaseTimeout occurs. (regression since 3.16.8)
    🛠 Fixed - use 60 seconds polling instead of take command for RRemoteService responses
    🛠 Fixed - eval() and evalSha() methods of Spring Data Redis ReactiveScriptingCommands object throw IndexOutOfBoundsException
    🛠 Fixed - expired entries eviction process is limited to 5000 per call
    🛠 Fixed - sharded topic isn't resubscribed after channel reconnection
    🛠 Fixed - execution of blpop command leads to reconnection

  • v3.17.3 Changes

    🔋 Feature - Hibernate 6 support

    👌 Improvement - amount of created connections in parallel reduced to 2 for better stability

    🛠 Fixed - Spring Boot Starter doesn't start with Spring Boot 2.7
    🛠 Fixed - RRateLimiter doesn't allow to set expiration time of permits and values

  • v3.17.2 Changes

    🔋 Feature - RScoredSortedSet.replace() method added
    🔋 Feature - Spring Data Redis 2.7.0 module added
    🔋 Feature - RPatternTopic.removeAllListenersAsync() method added
    🔋 Feature - RShardedTopic object added (requires Redis 7.0+)
    🔋 Feature - allow to specify username and password in redis connection url
    🔋 Feature - JCache data partitioning with local cache support

    🛠 Fixed - "Can't add slave" exceptions after fail over in cluster mode
    🛠 Fixed - "Unable to acquire subscription" error after connection interruption
    🛠 Fixed - JCache hangs forever when getting value from cache with useScriptCache=true
    🛠 Fixed - RMap.merge() method hangs if MapLoader specified
    🛠 Fixed - FairLock thread counter should start from 1 (thanks to @thisiswanghy)

  • v3.17.1 Changes

    🔋 Feature - transient fields support for LiveObjects to avoid data serialization
    🔋 Feature - removeAllListenersAsync() method added to RTopic object
    🔋 Feature - transactionAware setting added to RedissonSpringCacheManager

    👌 Improvement - amount of created connections in parallel reduced to 5, for better stability

    🛠 Fixed - RedissonReactiveClient.getMultilock() method should accept RLockReactive objects
    🛠 Fixed - RedissonRxClient.getMultilock() method should accept RLockRx objects
    🛠 Fixed - don't close connection on error response during topology scan
    🛠 Fixed - SET command should be an idempotent operation
    🛠 Fixed - MasterSlaveConnectionManager throws ClassCastException if host unknown
    🛠 Fixed - RReadWriteLock renewal doesn't work if writeLock released before readLock then both were acquired
    🛠 Fixed - Spring Data Redis module. Scan In cluster mode, other nodes cannot be scanned
    🛠 Fixed - RReliableTopic object throws "attempt to compare nil with number" error
    🛠 Fixed - RedissonSpinLock.tryLock() method returns false instead of true if the remaining wait time is negative
    🛠 Fixed - an error should be thrown if merge(), compute(), computeIfAbsent() and computeIfPresent() of RMap used in batch
    🛠 Fixed - Unable to specify timezone in CronSchedule object
    🛠 Fixed - RMapCache.destroy() method throws NPE
    🛠 Fixed - RLock.tryLock() method throws CancellationException
    🛠 Fixed - Unable to connect to Redis server error is thrown due to NPE
    🛠 Fixed - RBlockingQueue.pollLastAndOfferFirstTo() throws ClassCastException if result is empty
    🛠 Fixed - internal AsyncSemaphore doesn't skip canceled tasks in the same thread
    🛠 Fixed - RLocalCachedMap.getAll() method doesn't respect storeCacheMiss setting
    🛠 Fixed - 0 value for waitTime and leastTime isn't handled correctly by RMultiLock object
    🛠 Fixed - Spring Data Redis module. RedissonConnection.execute() method doesn't invoke overloaded methods correctly

  • v3.17.0 Changes

    🔋 Feature - RFunction object added (requires Redis 7.0+)
    🔋 Feature - pollLastEntriesFromAny() and pollFirstEntriesFromAny() methods added to RScoredSortedSet object (requires Redis 7.0+)
    🔋 Feature - expireIfSet(), expireIfNotSet(), expireIfGreater() and expireIfLess() methods added to RExpirable interface (requires Redis 7.0+)
    🔋 Feature - checkLockSyncedSlaves setting added
    🔋 Feature - getAndExpire and getAndClearExpire() methods added to RBucket object (requires Redis 6.2.0+)
    🔋 Feature - pollFirstFromAny() and pollLastFromAny() methods with timeout and count added to RScoredSortedSet object (requires Redis 7.0+)
    🔋 Feature - pollFirst() and pollLast() methods with timeout and count added to RScoredSortedSet object (requires Redis 7.0+)
    🔋 Feature - addAllIfLess(), addAllIfGreater(), addAllIfExist(), addAllIfAbsent() methods added to RScoredSortedSet object
    🔋 Feature - RExpirable.expire(Duration) method added
    🔋 Feature - RExpirable.expireTime() method added (requires Redis 7.0+)
    🔋 Feature - range(), rangeReversed(), entryRange(), entryRangeReversed() methods with limit parameter added to RTimeSeries object
    🔋 Feature - TransactionalOperation.syncSlaves setting added
    🔋 Feature - pollFirstFromAny() and pollLastFromAny() methods added to RBlockingQueue object (requires Redis 7.0+)

    👌 Improvement - read-only cached scripts should be executed on slaves (requires Redis 7.0+)
    👌 Improvement - SORT_RO command is used for slave nodes (requires Redis 7.0+)
    👌 Improvement - decrease size of allocated data by RPermitExpirableSemaphore

    🛠 Fixed - RedissonLocalCachedMap.clearLocalCache() method throws IllegalArgumentException
    🛠 Fixed - RedissonMultiLock doesn't work properly with RedissonSpinLock
    🛠 Fixed - SlaveConnectionPool no available Redis entries error occurs in Cluster mode
    🛠 Fixed - RKeys.deleteByPattern() method does not always delete keys correctly
    🛠 Fixed - expireAt(Instant) method of RExpirableReactive and RExpirableRx interfaces doesn't work
    🛠 Fixed - wrong detection of added and removed slots in Redis Cluster mode
    🛠 Fixed - RScoredSortedSet.addIfGreater() and RScoredSortedSet.addIfLess() methods always return false
    🛠 Fixed - Spring Data Connection in multi mode causes thread stuck (regression since 3.16.7)
    🛠 Fixed - Sentinel username setting is not applied (thanks to @nicolas-tg-ch)
    🛠 Fixed - RTimeSeries doesn't handle same values for different timestamps
    🛠 Fixed - Quarkus environment variables aren't parsed correctly
    🛠 Fixed - check expiration before release in RPermitExpirableSemaphore (thanks to @randomVariable2)
    🛠 Fixed - RedisTimeoutException: Command execution timeout for command: (PING) (regression since 3.16.3)
    🛠 Fixed - wrong wait time calculation in RedissonMultiLock lock method causes deadlock
    🛠 Fixed - RLocalCachedMap throws NPE if cache update listener receives message during init
    🛠 Fixed - AsyncRemoteProxy throws Redisson is shutdown exception
    🛠 Fixed - RedisClusterNode.clusterSlots() method throws Exception