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