Redisson Releases History
================================
### Please Note: trunk is current development branch.
Try __ [Redisson PRO ](https://redisson.pro )__ version.
### 15-Feb-2018 - versions 2.11.1 and 3.6.1 released
Feature - `RedissonClusteredSpringLocalCachedCacheManager` added. Please read [documentation ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks/#1421-spring-cache-local-cache-and-data-partitioning ) for more details
Feature - `rangeTailReversed` , `rangeHeadReversed` and `rangeReversed` methods added to `RLexSortedSet` object
Feature - `RBucketsAsync` interface added
Feature - `scanInterval` setting added for Sentinel mode
Feature - `RLocalCachedMap.clearLocalCache` method added
Fixed - remove hset command invocation during entry loading
Fixed - buffer leak in `replace` and `remove` methods of `RLocalCachedMap` object
Fixed - `RRemoteService` object throws NPE
Fixed - Multimap cluster compatibility
Fixed - Enum support for Live Objects
Fixed - Jackson 2.9 compatibility
Fixed - `RTopic.removeAllListeners` got blocked on invocation
Fixed - possible pubsub listeners leak
Fixed - `RBatch` throws NPE with big pipeline in atomic mode
Fixed - Warning about `CommandDecoder.decode()` method
### 29-Jan-2018 - versions 2.11.0 and 3.6.0 released
Feature - __ `atomic` setting added to RBatch object__ Please read [documentation ](https://github.com/redisson/redisson/wiki/10.-additional-features#103-execution-batches-of-commands ) for more details
Feature - __ `updateMode` setting added to Tomcat Redis Session Manager__ Please read [documentation ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks#145-tomcat-redis-session-manager ) for more details
Feature - __ `RateLimiter` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/6.-distributed-objects/#612-ratelimiter ) for more details
Feature - __ `RClusteredBloomFilter` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/6.-Distributed-objects#681-bloom-filter-data-partitioning ) for more details
Feature - __ `KQueue` support added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/2.-Configuration#eventloopgroup ) for more details
Feature - __ `Tomcat 9` support added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks#145-tomcat-redis-session-manager ) for more details
Feature - __ `RPriorityBlockingQueue` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#718-priority-blocking-queue ) for more details
Feature - __ `RPriorityBlockingDeque` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#719-priority-blocking-deque ) for more details
Feature - __ `RLongAdder` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/6.-distributed-objects/#610-longadder ) for more details
Feature - __ `DoubleAdder` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/6.-distributed-objects/#611-doubleadder ) for more details
Feature - `RBucket.getAndDelete` , `RAtomicLong.getAndDelete` and `RAtomicDouble.getAndDelete` methods added
Feature - __ `RAtomicDoubleReactive` object added__
Feature - `RPriorityQueue.pollLastAndOfferFirstTo` method added
Improvement - support single config endpoint node for cluster mode
Improvement - hash functions replaced with https://github.com/google/highwayhash
Fixed - JDK 1.6+ compatibility for RemoteService
Fixed - `setDnsMonitoringInterval(-1)` doesn't disable DNS monitoring
Fixed - `RLocalCachedMap.putAll` gets stuck if map passed as parameter contains > 10000 elements
Fixed - `RLocalCachedMap.put` value encoding
Fixed - `RKeys.countExists` and `RKeys.touch` return wrong result in cluster mode
Fixed - Wrong parsing of RScript.ReturnType.MULTI result
Fixed - RedissonReadLock by name with colon couldn't be unlocked properly
Fixed - `rg.springframework.cache.Cache$ValueRetrievalException` shouldn't be wrapped by IllegalStateException
Fixed - `RMapCache` listeners are not working on cross-platform environment
Fixed - JsonJacksonCoded shouldn't override provided objectMapper settings (thanks to @gzeskas )
### 25-Dec-2017 - versions 2.10.7 and 3.5.7 released
Feature - __ `RClusteredBitSet` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/6.-Distributed-objects/#641-bitset-data-partitioning ) for more details
Improvement - Memory consumption optimization. `RExecutorFuture` and `RScheduledFuture` shouldn't be tracked if they weren't stored
Improvement - Config settings `codecProvider` and `redissonReferenceEnabled` renamed to `referenceCodecProvider` and `referenceEnabled`
Fixed - `RedissonRedLock` couldn't be locked in some cases
Fixed - `RRemoteService` can't ack when running redis in cluster mode
Fixed - DNSMonitor fails on bootstrap with custom event loop
Fixed - Redis domain name IP address renew process
### 08-Dec-2017 - versions 2.10.6 and 3.5.6 released
Feature - `RSetMultimapReactive` object added
Feature - `RListMultimapReactive` object added
Feature - `ReconnectionStrategy` and `SyncStrategy` added to `LocalCachedMapOptions`
Feature - `pingConnectionInterval` setting added
Improvement - added sync on key for `JCache.invoke` method
Fixed - arguments encoding for `RScript`
Fixed - `MapLoader` hangs if loaded value is null
Fixed - OutOfMemory during `RExecutorService` usage
Fixed - NPE in `RedissonSession.save` method
Fixed - NPE during `RExecutorService` usage
Fixed - `SnappyCodec` can't handle data more than 32Kb
Fixed - failed to continue poll remote responses if current waiting for response has been canceled
Fixed - SSL support for cluster mode
Fixed - task with longer start time shouldn't overlap current task with shorter start time
Fixed - DNS monitor caches host name binding
Fixed - ReadMode.MASTER_SLAVE should be taken in account
Fixed - slave nodes should be added without freeze state
Fixed - master node should be disabled if any slave up
Fixed - handling connection to Redis nodes returned to online state
### 31-Oct-2017 - versions 2.10.5 and 3.5.5 released
`ProjectReactor` dependency for `3.5.5` version was updated to `3.1.1` version
Feature - Added pingConnection, keepAlive, tcpNoDelay settings
Feature - Slaves synchronization support for `RBatch` /`RBatchReactive` objects
Improvement - Data encoding should be executed on client thread only
Improvement - Handling Redis redirect optimization
Improvement - Better collection handling for RedissonReference (thanks to Rui Gu)
Fixed - `RedisLoadingException` handling during re-connection process
Fixed - `RedisClient` can't be shutdown properly
Fixed - timeout drift for `RFairLock`
Fixed - expiration handling of reentrant write lock
Fixed - `RReadWriteLock` doesn't work in cluster
Fixed - Blocking queues are't rethrow exceptions
Fixed - out of connections problem on high load during `RemoteExecutorService` /`ExecutorService` usage
Fixed - NPE during `RemoteService` object usage
Fixed - Getting memory leak warnings when gracefully shutting down tomcat
Fixed - `RMapCache.getAll` doesn't support large keySet
### 28-Sep-2017 - versions 2.10.4 and 3.5.4 released
Feature - added `maxSize` setting for `SpringCacheManager`
Feature - allow `LiveObjectService` to work with classes that inherit from REntities (thanks to @sdjacobs )
Improvement - `RMapCache` entires eviction process optimized
Improvement - handling of slave down process
Fixed - operation on slave coldn't be executed after its restart (thanks to @xavierfacq )
Fixed - `ArrayIndexOutOfBoundsException` in RedissonSessionRepository
Fixed - storing Live Objects in Redisson's collection objects (thanks to Rui Gu)
Fixed - cancel write operation for commands belong to disconnected connection
Fixed - possible race-condition during cancellation of write operation to Redis connection
Fixed - accessor methods in Live Objects break if they start with 'is' (thanks to @sdjacobs )
Fixed - MapReduce `Collator` couldn't be executed if timeout was defined
Fixed - RedissonKeys.delete throws `NullPointerException` in some cases
Fixed - `CancellationException` handling during RemotePromise cancellation
Fixed - `RedisNodeNotFoundException` should be supplied to Failed Promise
### 13-Sep-2017 - versions 2.10.3 and 3.5.3 released
Fixed - ByteBufs are not released properly in SnappyCodec and LZ4Codec (regression since 2.10.2 and 3.5.2)
### 12-Sep-2017 - versions 2.10.2 and 3.5.2 released
Feature - added `addScoreAndGetRank` and `addScoreAndGetRevRank` methods to `RScoredSortedSet` object
Feature - added `addAndGetRank` and `addAndGetRevRank` methods to `RScoredSortedSet` object (thanks to @zuanoc )
Feature - added support for bounded `RMapCache` object using `trySetMaxSize` `setMaxSize` methods (thanks to @johnou )
Feature - added search by pattern using `iterator` method of `RSet` objects
Feature - added search by pattern using `keySet` , `values` and `entrySet` methods of `RMap` objects
Feature - `addScoreAndGetRank` and `addScoreAndGetRevRank` methods were added to `RScoredSortedSet` object
Improvement - memory allocation optimization during encoding process
Fixed - fixed NPE in LoadBalancerManager (regression since 2.10.1 and 3.5.1)
Fixed - `RAtomicDouble.decrementAndGet`
Fixed - connection could be in closed state during reconnection process for blocking queue
### 29-Aug-2017 - versions 2.10.1 and 3.5.1 released
Feature - DNS monitoring support for Sentinel, Master/Slave and Replicated mode
Feature - `org.redisson.codec.CompositeCodec` added
Feature - added `readMode` property for Tomcat RedissonSessionManager
Fixed - `RMapCache.putAll` couldn't handle map with entries amount larger than 5000
Fixed - master entry should be shutdown in slaveConnectionPool during master change process
Fixed - Redisson's Tomcat Session attributes should be read first to avoid invalidated session exception
### 28-Jul-2017 - versions 2.10.0 and 3.5.0 released
Feature - __Local Cache support for Hibernate Cache__ Please read [documentation ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks/#1431-hibernate-cache-local-cache ) for more details
Feature - __Local Cache support for Spring Cache__ Please read [documentation ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks/#1421-spring-cache-local-cache ) for more details
Feature - __ `RedissonLocalCachedMapCache` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#713-map-local-cache-for-expiring-entries ) for more details
Feature - __ `BlockingFairDeque` object added__ Please read [documentation ](https://github.com/redisson/redisson/wiki/7.-distributed-collections#714-blocking-fair-deque ) for more details
Feature - __ `RLockReactive` object added__
Feature - __ `RReadWriteLockReactive` object added__
Feature - __ `RSemaphoreReactive` object added__
Feature - `unlink` , `flushdbParallel` , `flushallParallel` methods added
Fixed - ContextClassLoader should be used by Redisson Codec for Tomcat session's object serialization
Fixed - Spring Cache `NullValue` does not implement Serializable
Fixed - `RLocalCachedMap` doesn't work with non-json and non-binary codecs
Fixed - Tomcat RedissonSessionManager doesn't remove session on invalidation/expiration
Fixed - `RedissonBatch` shouldn't require `reactor.fn.Supplier` dependency
Fixed - Spring Session 1.3.x compatibility (thanks to Vcgoyo)
Fixed - priority queues should acquire lock before polling the element
### 12-Jul-2017 - versions 2.9.4 and 3.4.4 released
Feature - [Config.performanceMode ](https://github.com/redisson/redisson/wiki/2.-Configuration/_edit#performancemode ) setting added
Feature - JsonJacksonMapCodec codec added
Feature - [Amazon Ion ](https://amzn.github.io/ion-docs/ ) codec added
Feature - [read-through, write-through and write-behind ](https://github.com/redisson/redisson/wiki/7.-Distributed-collections/#714-map-persistence ) support for RMap objects
Feature - `RExecutorService` should return RExecutorFuture object with taskId
Feature - added `RList.get` method to load elements in a batch
Feature - ability to submit few tasks atomically (in batch) through `RExecutorService` interface
Feature - [Config.keepPubSubOrder ](https://github.com/redisson/redisson/wiki/2.-Configuration#keeppubsuborder ) setting added
Improvement - make `RMapReactive` and `RMapCacheReactive` interfaces match with `RMap` and `RMapCache`
Improvement - `RLexSortedSet` should extend `RSortedSet`
Fixed - connection listener is not invoked in some cases
Fixed - `RMapCache` `remove` , `put` , `putIfAbsent` and `replace` methods aren't respect entry expiration
Fixed - `SCAN` command should be used in `RKeys.deleteByPattern` method
Fixed - `RBinaryStream` doesn't work in Redis cluster environment
Fixed - `SELECT` command shouldn't be executed on Sentinel servers
Fixed - Stackoverflow error arise during decoding of large amount of PubSub messages
Fixed - `LocalCachedMapInvalidate` object can't be serialized by Kryo codec
Fixed - `XMLGregorianCalendar` type handling in JSON codec
Fixed - Reactive Stream methods shouldn't be executed immediately after `Publisher` object creation
### 10-Jun-2017 - versions 2.9.3 and 3.4.3 released
Since this version, if you use programmatic config definition you should define full url with schema.
```java
config.setAddress("redis://127.0.0.1:6739");
// or for SSL support
config.setAddress("rediss://127.0.0.1:6739");
```
Feature - __SSL support__
Feature - __ [RedisLabs ](http://redislabs.com ) hosting support__
Feature - `RBlockingQueue.takeLastAndOfferFirstTo` method added
Feature - `RScoredSortedSet.firstScore, lastScore` methods added
Feature - `RedissonCacheManager.setAllowNullValues` method added
Feature - `RedissonSpringCacheManager.setCacheNames` method added
Feature - Map Entry listeners support added for `RMapCache` object
Feature - `Config.lockWatchdogTimeout` parameter added
Improvement - NPE checking for key and value added for RedissonMapCache
Improvement - `RKeys.deleteByPatternAsync` uses scan command
Fixed - `RBoundedBlockingQueue.pollAsync` blocks if timeout is less than 1 second
Fixed - unlocking of nested `RReadWriteLock.readLock` deletes current acquired `RReadWriteLock.writeLock`
Fixed - wrong null values checking in RDelayedQueue methods
Fixed - probability of infinite scan for all iterators
Fixed - `Node.InfoSection` should be public
Fixed - JSR107 cache implementation should throw `javax.cache.CacheException` in case of any error
### 10-May-2017 - versions 2.9.2 and 3.4.2 released
Feature - __Dropwizard metrics integration__ More details [here ](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks#147-dropwizard-metrics )
Feature - `RLocalCachedMap.preloadCache` method added (thanks to Steve Draper)
Feature - `RGeo.radiusStoreTo` methods added (thanks to Cory Sherman)
Fixed - NoClassDefFoundError exception during using `redisson-all` module
### 27-Apr-2017 - versions 2.9.1 and 3.4.1 released
Fixed - `RLocalCachedMap.getAll` didn't use cache (thanks to Steve Draper)
Fixed - reference to avro module has been removed
### 26-Apr-2017 - versions 2.9.0 and 3.4.0 released
Feature - __ `MapReduceService` added__ More details [here ](https://github.com/redisson/redisson/wiki/9.-distributed-services/#95-distributed-mapreduce-service )
Feature - `readAllMap` and `readAllMapAsync` methods added to `RMap`
Feature - `readAllKeySet` and `getReadWriteLock` methods added to `RMultimap`
Feature - `RKeys.delete` by objects method added
Feature - `RRemoteService.deregister` method added
Feature - `retryAttempts` , `retryInterval` and `timeout` methods added to `RBatch` object
Feature - `RMapCache.fastPutIfAbsent` with ttl added (thanks to Dobi)
Feature - `EvictionPolicy.WEAK` added for `RLocalCachedMap`
Feature - `LocalCachedMapOptions.invalidationPolicy` introduced for `RLocalCachedMap`
Feature - `expire` , `expireAt` , `move` , `migrate` , `clearExpire` , `renamenx` , `rename` , `remainTimeToLive` methods added to RKey
Improvement - `EvictionPolicy.LRU` optimization for `RLocalCachedMap`
Fixed - `RTopic.onSubscribe` should be invoked after failover process
Fixed - Spring boot with redisson 3.3.2 fails without optional actuator dependency (thanks to Rick Perkowski)
Fixed - `RedissonCacheMap.putIfAbsentAsync` doesn't take in account ttl and minIdleTime params (thanks to Dobi)
Fixed - Spring cache should put NullValue object instead of null
Fixed - Fixed error - No field factory in class Ljava/net/URL
Fixed - Spring cache's method with `@Cacheable(sync=true)` annotation never expires (thanks to Dobi)
Fixed - spring schema file corrected (thanks to Rui Gu)
Fixed - Prevent to set URL.factory to null in case of concurrent URL creation in the URLBuilder (thanks to Björn-Ole Ebers)
Fixed - `RMap.addAndGet` causes bad argument (thanks to Rui Gu)
Fixed - `RedissonSpringCacheManager` creates new cache on each `getCache` call
Fixed - wrong value codec encoder usage for `RedissonLocalCachedMap.fastPutAsync` method
### 21-Mar-2017 - versions 2.8.2 and 3.3.2 released
Feature - Redisson's Spring custom namespace support (thanks to Rui Gu)
Feature - ability to set custom connection manager (thanks to Saikiran Daripelli)
Feature - autoconfigured Spring Boot CacheStatisticsProvider implementation (thanks to Craig Andrews)
Feature - `RKeys.touch` and `RObject.touch` methods added
Feature - `RedissonCompletionService` implementation added
Feature - `RMap.getReadWriteLock` method added
Fixed - NPE during `RLocalCachedMap.fastRemove` invocation
Fixed - `redisson-tomcat-8` module is not compatible with Tomcat 8.5
Fixed - URLBuilder methods should be synchronized
Fixed - use PSETEX in `RBucket.set` method
Fixed - `DelayedQueue.remove()` and `DelayedQueue.removeAll()`
Fixed - unable to define Type and AvroSchema for AvroJacksonCodec
Fixed - ReadWriteLock leaseTimeout calculation
Fixed - `Config.fromJson(file)` method, throws StackOverflowError
### 04-Mar-2017 - versions 2.8.1 and 3.3.1 released
Feature - Cache with SoftReference support added for `RLocalCachedMap`
Feature - `Config.subscriptionMode` setting added
Improvement - errors handling during RBatch execution
Fixed - StackOverflowException in URLBuilder
Fixed - TomcatSessionManager can't be used in Tomcat if Redisson has been deployed in web application
Fixed - skip cluster nodes with the "handshake" flag (thanks to @dcheckoway )
### 19-Feb-2017 - versions 2.8.0 and 3.3.0 released
Feature - __ `RClusteredLocalCachedMap` object added__ More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections#713-map-data-partitioning )
Feature - __ `RClusteredMapCache` object added__ More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections#713-map-data-partitioning )
Feature - __ `RClusteredSetCache` object added__ More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#732-set-data-partitioning )
Feature - __ `RPriorityQueue` object added__ More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#715-priority-queue )
Feature - __ `RPriorityDeque` object added__ More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#716-priority-deque )
Feature - `removeAllListeners` and `removeListener` by instance methods added for `RTopic` and `RPatternTopic`
Feature - `RLockAsync` interface added
Improvement - `RRemoteService` is now able to support method overload
Fixed - `RLocalCachedMap` is not Redis cluster compatible
Fixed - cascade slaves are not supported in cluster mode
Fixed - shutdown checking during master change state check added
Fixed - master isn't checked during new slave discovery in Sentinel mode
### 02-Feb-2017 - versions 2.7.4 and 3.2.4 released
Feature - Allow to specify Redisson instance/config during JCache cache creation
Fixed - `ByteBuf.release` method invocation is missed in `LZ4Codec` and `SnappyCodec`
Fixed - AssertionError during Redisson shutdown
Fixed - `RReadWriteLock.readLock` couldn't be acquired by same thread which has already acquired `writeLock`
Fixed - failed `RFairLock.tryLock` attempt retains caller thread in fairLock queue
Fixed - `factory already defined` error
Fixed - `JCache` expiration listener doesn't work
Fixed - `RLocalCachedMap` doesn't work with `SerializationCodec`
Fixed - `Can't find entry` error during operation execution on slave nodes
### 19-Jan-2017 - versions 2.7.3 and 3.2.3 released
Redisson Team is pleased to announce __ULTRA-FAST__ Redisson PRO edition.
Performance measure results available in [Benchmark whitepaper ](https://redisson.pro/Redisson%20PRO%20benchmark%20whitepaper.pdf )
Feature - `RMap.getLock(key)` and `RMultimap.getLock(key)` methods added
Improvement - `RedissonSpringCacheManager` constructor with Redisson instance only added
Improvement - `CronSchedule` moved to `org.redisson.api` package
Fixed - RedissonBaseIterator.hasNext() doesn't return false in some cases
Fixed - NoSuchFieldError exception in `redisson-tomcat` modules
Fixed - ConnectionPool size not respected during redirect of cluster request
Fixed - `RSortedSet.removeAsync` and `RSortedSet.addAsync`
Fixed - `RBloomFilter.tryInit` were not validated properly
Fixed - CommandDecoder should print all replay body on error
### 19-Dec-2016 - versions 2.7.2 and 3.2.2 released
Feature - `RList` , `RSet` and `RScoredSortedSet` implements `RSortable` interface with SORT command support
Feature - `NodeAsync` interface
Feature - `Node.info` , `Node.getNode` methods added
Fixed - elements distribution of `RBlockingFairQueue` across consumers
Fixed - `factory already defined` error during Redisson initialization under Apache Tomcat
### 14-Dec-2016 - versions 2.7.1 and 3.2.1 released
Url format used in config files __has changed__ . For example:
"//127.0.0.1:6739" now should be written as "redis://127.0.0.1:6739"
Feature - `RSet.removeRandom` allows to remove several members at once
Fixed - exceptions during shutdown
Fixed - redis url couldn't contain underscore in host name
Fixed - IndexOutOfBoundsException during response decoding
Fixed - command timeout didn't respect during topic subscription
Fixed - possible PublishSubscribe race-condition
Fixed - blocking queue/deque poll method blocks infinitely if delay less than 1 second
### 26-Nov-2016 - versions 2.7.0 and 3.2.0 released
Feature - __Spring Session implementation__ . More details [here ](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#145-spring-session )
Feature - __Tomcat Session Manager implementation__ . More details [here ](https://github.com/redisson/redisson/wiki/14.-Integration%20with%20frameworks/#144-tomcat-redis-session-manager )
Feature - __RDelayedQueue object added__ . More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#714-delayed-queue )
Feature - __RBlockingFairQueue object added__ . More details [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#713-blocking-fair-queue )
Feature - `RSortedSet.readAll` and `RQueue.readAll` methods added
Fixed - `RMap.getAll` doesn't not preserve the order of elements
Fixed - Wrong nodes parsing in result of cluster info command
Fixed - NullPointerException in CommandDecoder.handleResult
Fixed - Redisson shutdown status should be checked during async command invocation
### 07-Nov-2016 - versions 2.6.0 and 3.1.0 released
Feature - __new object added__ `RBinaryStream` . More info about it [here ](https://github.com/redisson/redisson/wiki/6.-distributed-objects/#62-binary-stream-holder )
Improvement - limit Payload String on RedisTimeoutException
Improvement - Elasticache master node change detection process optimization
### 27-Oct-2016 - versions 2.5.1 and 3.0.1 released
Include all code changes from __2.2.27__ version
Fixed - RMapCache.fastPutIfAbsentAsync doesn't take in account expiration
Fixed - timer field of RedisClient hasn't been initialized properly in some cases
### 27-Oct-2016 - version 2.2.27 released
This version fixes old and annonying problem with `ConnectionPool exhusted` error. From this moment connection pool waits for free connection instead of throwing pool exhausted error. This leads to more effective Redis connection utilization.
Improvement - remove `Connection pool exhausted` exception
### 17-Oct-2016 - version 3.0.0 released
Fully compatible with JDK 8. Includes all code changes from __2.5.0__ version
Feature - `RFeature` extends `CompletionStage`
### 17-Oct-2016 - version 2.5.0 released
This version brings greatly improved version of `RLiveObjectService` and adds cascade handling, cyclic dependency resolving, simplified object creation. Read more in this [article ](https://dzone.com/articles/java-distributed-in-memory-data-model-powered-by-r )
Includes all code changes from __2.2.26__ version
Feautre - COUNT and ASC/DESC support for `RGeo` radius methods
Feature - `RGeo` extends `RScoredSortedSet`
Feature - `RCascade` annotation support LiveObjectService
Improvement - `RId` generator should be empty by default
Improvement - support setter/getter with protected visibility scope for LiveObject
Fixed - `RMapCache` doesn't keep entries insertion order during iteration
Fixed - `@RId` is returned/overwritten by similarly named methods (thanks to Rui Gu)
Fixed - typo `getRemoteSerivce` -> `getRemoteService` (thanks to Slava Rosin)
Fixed - `RPermitExpirableSemaphore.availablePermits` doesn't return actual permits account under certain conditions
Fixed - `readAllValues` and `readAllEntrySet` methods of `RLocalCacheMap` return wrong values
Fixed - setter for collection field of LiveObject entity should rewrite collection content
Fixed - `RSetCache` TTL not updated if element already present
Fixed - `RLiveObjectService` swallow exceptions during `merge` or `persist` operation
Fixed - `RLiveObjectService` doesn't support protected constructors
Fixed - object with cyclic dependencies lead to stackoverflow during `RLiveObjectService.detach` process
Fixed - not persisted `REntity` object allowed to store automatically
Fixed - `RLexSortedSet.addAll` doesn't work
Fixed - `RLiveObjectService` can't detach content of List object
Fixed - `RLiveObjectService` doesn't create objects mapped to Redisson objects in runtime during getter accesss
Fixed - `RLiveObjectService` can't recognize id field of object without setter
### 17-Oct-2016 - version 2.2.26 released
Fixed - NPE in CommandDecoder
Fixed - PubSub connection re-subscription doesn't work in case when there is only one slave available
### 27-Sep-2016 - version 2.4.0 released
Includes all code changes from __2.2.25__ version
Feature - __new object added__ `RPermitExpirableSemaphore` . More info about it [here ](https://github.com/redisson/redisson/wiki/8.-distributed-locks-and-synchronizers#87-permitexpirablesemaphore )
Feature - __new object added__ `RLocalCachedMap` . More info about it [here ](https://github.com/redisson/redisson/wiki/7.-distributed-collections#712-map-local-cache )
Feature - __references support__ (thanks to Rui Gu) More info about it [here ](https://github.com/redisson/redisson/wiki/10.-Additional-features#102-references-to-redisson-objects )
Feature - __Docker support__ More info about it [here ](https://github.com/redisson/redisson/wiki/12.-Standalone-node#126-how-to-run-using-docker )
Feature - `RSemaphore.reducePermits` method added
Feature - `nettyThreads` and `executor` settings added
Feature - `valueRangeReversed` , `entryRangeReversed` , `union` and `intersection` methods added to `RScoredSortedSet` object
Feature - `Node.time` method added
Feature - `RMap.valueSize` method added
Feature - `RBucket.size` method added
Feature - `RBatch.executeSkipResult` method added
Improvement - Redisson Node could be created with existing Redisson instance
Improvement - `RMultimap.get` should return `RSet` or `RList` interface instead of `Set` and `List`
Fixed - `RExecutorService` should reject non-static inner task class
Fixed - wrong object encoding in `RScoredSortedSet.addScore` method
### 27-Sep-2016 - version 2.2.25 released
Improvement - log unexpected errors in netty handlers
Improvement - `Not all slots are covered` error should be more informative
Improvement - implement random wait time in `lock` method of `RedissonRedLock` and `RedissonMultiLock` objects
Fixed - `ClassCastException` error when there are no slaves in sentinel mode
Fixed - keep RMap insertion ordering while iteration
Fixed - thread stuck at `lock` method of `RedissonRedLock` and `RedissonMultiLock` objects
Fixed - incorrect `tryLock` behaviour of `RedissonRedLock` and `RedissonMultiLock` objects
Fixed - connection shouldn't be closed on exceptionCaught
Fixed - Jackson 2.8.x compatibility
Fixed - TRYAGAIN error handling in cluster mode
Fixed - sync commands in connectionListener leads to connection timeout exception
Fixed - can't find slave error in cluster mode if failed slave hasn't been added before
### 24-Aug-2016 - version 2.3.0 released
Starting from this version Redisson could be run as standalone node to execute distributed tasks. More features will be added to it in future. Read docs about it [here ](https://github.com/mrniko/redisson/wiki/12.-Standalone-node )
Feature - __new service added__ `RExecutorService` . More info about it [here ](https://github.com/mrniko/redisson/wiki/9.-distributed-services/#93-distributed-executor-service )
Feature - __new service added__ `RScheduledExecutorService` . More info about it
[here ](https://github.com/mrniko/redisson/wiki/9.-distributed-services#94-distributed-scheduled-executor-service )
Feature - __new service added__ `RLiveObjectService` . More info about it
[here ](https://github.com/mrniko/redisson/wiki/9.-distributed-services/#92-live-object-service ) (big thanks to Rui Gu for this amazing feature)
Feature - __new object added__ `RBoundedBlockingQueue` . More info about it [here ](https://github.com/mrniko/redisson/wiki/7.-distributed-collections/#711-bounded-blocking-queue )
Feature - __Redis deployment tool__ . More info about it
[here ](https://github.com/mrniko/redisson/wiki/13.-Tools#131-redis-deployment-tool )
Feature - __Cluster management tool__ . More info about it [here ](https://github.com/mrniko/redisson/wiki/13.-Tools#132-cluster-management-tool )
Feature - Avro and Smile codecs added
__Breaking api change__ - all config classes moved to `org.redisson.config` package
__Breaking api change__ - all classes moved from `org.redisson.core` to `org.redisson.api` package
__Breaking api change__ - switched from `io.netty.util.concurrent.Future` to `org.redisson.api.RFuture` interface
Fixed - division by zero in WeightedRoundRobinBalancer (thanks to Shailender R Bathula)
### 08-Aug-2016 - version 2.2.24 released
Fixed - PubSub connection in cluster mode should be connected to node according slot derived from channel name
Fixed - `RLock.tryLock` could block forever under some conditions
### 04-Aug-2016 - version 2.2.23 released
Improvement - `Future.cancel` method handling for RemoteService async call
Fixed - unable to redefine RedisClient command execution timeout
Fixed - exception occured in CommandEncoder leads to reponse timeout exception
Fixed - exception occured in CommandDecoder leads to reponse timeout exception
Fixed - BLPOP timeout calculation fixed
Fixed - object used in RemoteService to prevent race-condition during ack receiving should be created per request
### 26-Jul-2016 - version 2.2.22 released
Fixed - java.lang.UnsupportedOperationException during command batch usage with netty 4.0.38 and higher
### 15-Jul-2016 - version 2.2.21 released
Fixed - `RLock` , `RReadWriteLock` , `RSemaphore` and `RCountDownLatch` can blocks forever under some conditions
### 14-Jul-2016 - version 2.2.20 released
Fixed - NPE during pubsub re-subscription (regression since 2.2.18)
Fixed - `RSortedSet` doesn't work in cluster mode (regression since 2.2.16)
Fixed - PubSub connection pool initialization in cluster mode
Fixed - NPE during pubsub usage in cluster mode (regression since 2.2.18)
### 13-Jul-2016 - version 2.2.19 released
Feature - `RSetReactive.readIntersection` , `RSetReactive.diff` and `RSetReactive.intersection` added
Fixed - cluster commands handling regression (regression since 2.2.18)
### 13-Jul-2016 - version 2.2.18 released
Feature - `RSet.randomAsync` and `RSet.random` commands added (thanks to dcheckoway)
Feature - commandTimeout param added to RedisClient
Feature - `JsonJacksonMapValueCodec` basic typed map value codec added (thanks to andrejserafim)
Improvement - PubSub management has been reimplemented this resolves some issues with RLock, RSemaphore objects
Fixed - disconnected pubsub connection leads to missed response for unsubscribe/punsubscribe operations
Fixed - cluster slot changes discovery
Fixed - execute all lock, semaphore and countdownlatch commands on master node
Fixed - shutdown listeners added during blocking operations usage weren't removing in some cases
Fixed - response parsing of cluster nodes command
Fixed - Connections weren't closing during `RedisClient` shutdown
Fixed - `RedissonRedLock.unlock`
### 30-Jun-2016 - version 2.2.17 released
Feature - `RMultimap.keySize` method added
Feature - `RKeys.getType` method added
Feature - `RKeys.getKeysByPattern` method with count param added
Improvement - `RedissonMultiLock.lock` method optimization
Feature - `RedissonRedLock` implemented
Fixed - `RMapCache.delete` doesn't delete redisson__idle__set__
Fixed - integer comparison in EvictionScheduler
Fixed - ByteBuf leak (thanks to jackygurui)
Fixed - `RTopic.addListener` method worked asynchronous sometimes
Fixed - ClastCastException occurred if multi-type PubSub channels were used with single connection
Fixed - PubSub status message decoding
Fixed - RLock.lock can hang in some cases
Fixed - PubSub subscription may stuck in some cases
Fixed - return value of `RedissonMultimap.keySet.size` method
### 12-Jun-2016 - version 2.2.16 released
Feature - `RGeo` , `RMultimapCache` added to `RBatch`
Feature - `fastRemove` and `fastRemoveAsync` methods were added to `RList`
Improvement - added Spring 4.3.0 support to RedissonSpringCacheManager
Improvement - `RSortedSet` performance boost up to __x4__
Improvement - `RList.remove` optimization
Improvement - ability to define `Codec` for `RRemoteService`
Fixed - cluster state managing with redis masters only
Fixed - dead lock during `RLock` , `RSemaphore` , `RReadWriteLock` , `RCountDownLatch` usage under heavy load
### 08-Jun-2016 - version 2.2.15 released
Improvement - Performance boost up to 30% for `RSortedSet.add` method
Fixed - auth during reconnection (thanks to fransiskusx)
Fixed - Infinity loop with iterator
Fixed - NPE in `RSortedSet`
Fixed - `RSortedSet.remove` and `iterator.remove` methods can break elements ordering
### 27-May-2016 - version 2.2.14 released
Redisson Team is pleased to announce [Redisson PRO ](http://redisson.pro ) edition. This version is based on open-source edition and has 24x7 support and some features.
Feature - __data sharding for `RMap`, `RSet` structures in cluster mode__ available only in [Redisson PRO ](http://redisson.pro ) edition
Feature - __new object added__ `RLock` with fair mode support
Feature - Ability to execute interface methods used for RemoteService in asynchronous way
Feature - `RSemaphoreAsync` interface implemented
Feature - `addBefore` , `addBeforeAsync` , `addAfter` , `addAfterAsync` methods added to `RList` object
Feature - `readAll` , `pollFirst` , `pollLast` , `first` , `last` , `revRankAsync` , `readAllAsync` , `pollFirstAsync` , `pollLastAsync` , `firstAsync` , `lastAsync` and `revRankAsync` methods added to `RLexSortedSet` object
Feature - `count` , `countAsync` , `readAll` , `readAllAsync` methods added to `RScoredSortedSet` object
Feature - `entryValueReversed` , `entryValueReversedAsync` methods added to`RScoredSortedSet` (thanks to weiqiyiji)
Feature - Ability to specify the name prefix for `RRemoteService` (thanks to pierredavidbelanger)
Feature - Ability to make remote call in fire-and-forget and ack-response modes only (thanks to pierredavidbelanger)
Improvement - optimized cluster redirect handling during `RBatch` execution
Fixed - `RScoredSortedSet.retainAll` method works incorrectly in some cases
Fixed - `getBlockingQueue` throws `IndexOutOfBoundsException` (thanks to jackygurui)
Fixed - `GEODIST` command handling in `RGeo` object (thanks to jackygurui)
Fixed - `RObject.expireAt` method uses second instead of ms
Fixed - don't make a remote call when toString, equals and hashCode are called via remote interface (thanks to pierredavidbelanger)
Fixed - `RRemoteService` doesn't work correctly with serialzation codecs (thanks to pierredavidbelanger)
Fixed - executors amount is not enforced (thanks to pierredavidbelanger)
Fixed - FSTObjectOutput shouldn't be closed after write
Fixed - possible race-condition during ack waiting in `RRemoteService` object
Fixed - timeWait checking fixed in `RLock.tryLockAsync`
### 30-Apr-2016 - version 2.2.13 released
Feature - `RSet.diff` and `RSet.intersection` methods added
Imporovement - `RScoredSortedSet` .`containsAll`, `removeAll` and `retainAll` methods speed optimization
Imporovement - `RSetCache` memory and speed optimization
Imporovement - `RSet` .`retainAll`, `containsAll` , `removeAll` methods speed optimized up to 100x
Fixed - possible infinity `RLock` expiration renewal process
Fixed - error during `RSetCache.readAll` invocation.
Fixed - expiration override wasn't work in `RSetCache.add`
### 22-Apr-2016 - version 2.2.12 released
Imporovement - Replaying phase handling in CommandDecoder
Fixed - cluster state update manager can't try next node if current node has failed to response
Fixed - cluster initialization
Fixed - items removing during `RMap` iteration
Fixed - `RGeo.addAsync` codec definition
Fixed - `RMapCache` iterator and readAll methods
Fixed - unnecessary slots migration in cluster mode
Fixed - Command batches redirect in cluster mode
Fixed - cluster mode compatibility for `RedissonMultimap.fastRemove` method
Fixed - `RedissonMultiLock` deadlock
Fixed - MultiDecoder empty result handling
Fixed - array start index in LUA scripts
Fixed - RMap iterator
Fixed - probably thread blocking issues
### 04-Apr-2016 - version 2.2.11 released
Since this version Redisson has __perfomance boost up to 43%__
Feature - __new object added__ `RGeo`
Feature - __new object added__ `RBuckets`
Feature - travis-ci integration (thanks to jackygurui)
Improvement - `RScoredSortedSet.removeAllAsync` & `removeAll` methods optimization
Improvement - `RemoteService` reliability tuned up
Improvement - Reattaching RBlockingQueue\Deque blocking commands (poll, take ...) after Redis failover process or channel reconnection
Fixed - iterator objects may skip results in some cases
Fixed - RTopic listeners hangs during synchronous commands execution inside it
Fixed - Redisson hangs during shutdown if `RBlockingQueue\Deque.take` or `RBlockingQueue\Deque.poll` methods were invoked
### 23-Mar-2016 - version 2.2.10 released
Feature - __new object added__ `RRemoteService`
Feature - __new object added__ `RSetMultimapCache`
Feature - __new object added__ `RListMultimapCache`
Improvement - ability to cancel BRPOP and BLPOP async command execution
Improvement - Config params validation
Improvement - test RedisRunner improvements (thanks to jackygurui)
Improvement - `Double.NEGATIVE_INFINITY` and `Double.POSITIVE_INFINITY` handling for ScoredSortedSet (thanks to jackygurui)
Fixed - MOVED, ASK handling in cluster mode using RBatch
Fixed - delete and expire logic for Multimap objects
Fixed - `RLock.tryLockAsync` NPE
Fixed - possible NPE during Redisson version logging
Fixed - Netty threads shutdown after connection error
### 04-Mar-2016 - version 2.2.9 released
Feature - __new object added__ `RSetMultimap`
Feature - __new object added__ `RListMultimap`
Feature - `valueRangeReversed` and `valueRangeReversedAsync` methods were added to `RScoredSortedSet` object
Improvement - Throw `RedisOutOfMemoryException` when OOM error from Redis server has occured
Improvement - Node type added to optimization in Cluster mode
Improvement - Add DynamicImport-Package to OSGi headers
Fixed - `RedissonSpringCacheManager` Sentinel compatibility
Fixed - `RAtomicLong.compareAndSet` doesn't work when expected value is 0 and it wasn't initialized
### 12-Feb-2016 - version 2.2.8 released
Feature - `union` , `unionAsync` , `readUnion` and `readUnionAsync` methods were added to `RSet` object
Feature - `readAll` and `readAllAsync` methods were added to `RSetCache` object
Improvement - `RKeys.delete` optimization in Cluster mode
Fixed - Script error during `RSetCache.toArray` and `RSetCache.readAll` methods invocation
Fixed - Sentinel doesn't support AUTH command
Fixed - RMap iterator
### 03-Feb-2016 - version 2.2.7 released
Feature - `readAllKeySet` , `readAllValues` , `readAllEntry` , `readAllKeySetAsync` , `readAllValuesAsync` , `readAllEntryAsync` methods were added to `RMap` object
Improvement - `RKeys.delete` optimization in Cluster mode
Fixed - minimal connections amount initialization
Fixed - `RKeys.deleteByPattern` throws an error in cluster mode
Fixed - `RKeys.deleteAsync` throws error in Cluster mode
Fixed - Redisson failed to start when one of sentinel servers is down
Fixed - Redisson failed to start when there are no slaves in Sentinel mode
Fixed - slave nodes up/down state discovery in Cluster mode
Fixed - slave can stay freezed when it has been just added in Sentinel mode
Fixed - offline slaves handling during Redisson start in Sentinel mode
Fixed - `SELECT` command can't be executed in Sentinel mode
Fixed - `database` setting removed from cluster config
### 28-Jan-2016 - version 2.2.6 released
Feature - __new object added__ `RedissonMultiLock`
Feature - `move` method added to `RSet` , `RSetReactive` objects (thanks to thrau)
Feature - `put` methods with `maxIdleTime` param added to `RMapCache` object
Feature - `RList.subList` returns `live` view object
Feature - `readAll` method added to `RList` and `RSet` objects
Feature - `trim` method added to `RList` object
Feature - ability to read/write Redisson config object from/to `JSON` or `YAML` format
Feature - [Spring cache ](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html ) integration
Feature - `readMode` setting added
Improvement - `RSetCache` object entry eviction optimization
Improvement - `RList` object optimization
Improvement - `RedissonCountDownLatchAsync` interface added
Improvement - cluster restrictions removed from `loadBucketValues` and `saveBuckets` methods
Fixed - wrong ByteBuf read position in all codecs based on `StringCodec`
Fixed - can't connect with password to Sentinel and Elasticache servers
Fixed - Cluster slave discovery (regression since 2.1.5)
Fixed - Sentinel slave discovery (regression since 2.1.5)
### 09-Jan-2015 - version 2.2.5 released
Feature - __new object added__ `RBloomFilter`
Feature - __new object added__ `RAtomicDouble`
Feature - `tryAdd` , `tryAddAsync` , `addAll` and `addAllAsync` methods added to `RScoredSortedSet`
Feature - `RKeys.count` and `RKeys.countAsync` methods added
Feature - `RedissonClient.saveBuckets` method added
Feature - `trySet` , `trySetAsync` , `compareAndSet` and `getAndSet` methods added to `RBucket`
Feature - `fastPutIfAbsent` and `fastPutIfAbsentAsync` methods added to `RMap`
Improvement - `RMap.putIfAbsent` optimization
Improvement - `RBitSet` index range extended to Integer.MAX_VALUE*2
Improvement - `RAtomicLong.getAndAdd` optimization
Fixed - infinity loop during `RMap` iteration
Fixed - wrong timeout value used during `RBatch` execution
Fixed - connection handling when `isReadFromSlaves = false`
Fixed - `RMap.addAndGetAsync` key encoding
Fixed - `RBatch` errors handling
Fixed - `RBlockingQueue.pollLastAndOfferFirstToAsync` does not block properly
### 25-Dec-2015 - version 2.2.4 released
Please update to this version ASAP due to connection leak discovered in previous versions since Redisson 2.1.4.
Feature - __new object added__ `RBlockingDeque`
Feature - __new object added__ `RSemaphore`
Feature - `RMapCache.fastPut` method with TTL support added
Feature - `WeightedRoundRobinBalancer` slaves balancer added
Improvement - Memory consumption optimization
Improvement - storing value with ttl = 0 in `RSetCache` or `RMapCache` saves it infinitely
Fixed - reconnection handling when Sentinel servers are restarted
Fixed - RedisConnectionException should be throw if Redisson can't connect to servers at startup
Fixed - Connection leak (regression bug since 2.1.4)
Fixed - ConnectionWatchdog throws exception when eventloop in shutdown state
Fixed - `RReadWriteLock.forceUnlock` works only for current thread
Fixed - MapKeyDecoder and MapValueDecoder are called in wrong order
Fixed - `RReadWriteLock` doesn't work in cluster mode
### 15-Dec-2015 - version 2.2.3 released
Feature - ability to set connection listener via `Config.connectionListener` setting
Fixed - `RLock` expiration bug fixed (regression bug since 2.2.2)
Fixed - NPE in `RedissonSortedSet` constructor
### 14-Dec-2015 - version 2.2.2 released
Feature - `isShuttingDown` and `isShutdown` methods were added to RedissonClient and RedissonReactiveClient
Feature - __new object added__ `RSetCacheReactive`
Fixed - RLock expiration renewal task scheduling fixed (regression bug since 2.2.1)
Fixed - RExpirable.expireAsync timeUnit precision fixed (regression bug since 2.2.1)
### 11-Dec-2015 - version 2.2.1 released
Feature - __new object added__ `RReadWriteLock` with reentrant read/write locking
Feature - __new object added__ `RMapCache` map-based cache with TTL support for each entry
Feature - __new object added__ `RSetCache` set-based cache with TTL support for each value
Feature - `RBatchReactive.getKeys` method added
Feature - `RMap.values()` , `RMap.keySet()` , `RMap.entrySet()` reimplemented with live-view objects
Feature - `RObjectReactive.isExists` , `RObject.isExists` and `RObject.isExistsAsync` added
Fixed - `RLock.unlock` not thrown IllegalMonitorStateException
### 04-Dec-2015 - version 2.2.0 released
Since 2.2.0 version Redisson supports [Reactive Streams ](http://www.reactive-streams.org ). Use `Redisson.createReactive` method to access Reactive objects.
Feature - [Reactive Streams ](http://www.reactive-streams.org ) support
Feature - `RList.addAllAsync` and `RMap.getAllAsync` methods added
Feature - `RList.equals` and `RList.hashCode` methods implemented
Feature - `pollFirst` , `pollFirstAsync` , `pollLast` , `pollLastAsync` methods added to `RScoredSortedSet`
Improvement - `RLock` and `RCountDownLatch` switched to `LongCodec`
__Breaking api change__ - `RExpirable` methods now uses milliseconds instead of seconds
Fixed - `RLock.delete` didn't check lock existence
`Config.useMasterSlaveConnection` and `Config.useSentinelConnection` methods renamed to `Config.useSentinelServers` and `Config.useMasterSlaveServers` respectively
Deprecated methods are dropped
### 30-Nov-2015 - version 2.1.6 released
Fixed - connection pool regression bug
Fixed - connection init during `Node.ping` and `ClusterNode.info` invocation
### 24-Nov-2015 - version 2.1.5 released
Feature - new methods with `limit` option support were added to `RLexSortedSet` : `lexRange` , `lexRangeHead` , `lexRangeHeadAsync` , `lexRangeTail` , `lexRangeTailAsync` , `lexRangeAsync` (thanks to jackygurui)
Feature - new methods with `limit` option support were added to `RScoredSortedSet` : `valueRange` , `valueRangeAsync` , `entryRange` , `entryRangeAsync` , `valueRange` , `valueRangeAsync` (thanks to jackygurui)
Feature - `LOADING` Redis server response handling
Feature - `RKeys.getSlot` method added
Feature - new config options `reconnectionTimeout` , `failedAttempts` , `connectTimeout` , `slaveSubscriptionConnectionMinimumIdleSize` , `masterConnectionMinimumIdleSize` , `'slaveConnectionMinimumIdleSize` , `idleConnectionTimeout`
Feature - `RBitSet` object added
Feature - `RBlockingQueue.pollFromAny` and `RBlockingQueue.pollFromAnyAsync` methods added
Improvements - `LoadBalancer` interface refactored
Fixed - RedisTimeoutException message
Fixed - command execution timeout handling
Fixed - `RList.addAllAsync`
Fixed - `RSet.iterator`
Fixed - `RBatch.execute` and `RBatch.executeAsync` errors handling
### 11-Nov-2015 - version 2.1.4 released
Cluster support improvements. New codecs. Stability improvements.
Feature - [LZ4 ](https://github.com/jpountz/lz4-java ) compression codec support
Feature - [CBOR ](http://cbor.io/ ) binary json codec support (thanks to lefay)
Feature - [MsgPack ](http://msgpack.org/ ) binary json codec support
Feature - [Fst ](https://github.com/RuedigerMoeller/fast-serialization ) serialization codec support
Feature - [Snappy ](https://github.com/xerial/snappy-java ) compression codec support
Feature - cluster slave nodes change monitoring
Feature - `Config.slaveFailedAttempts` and `Config.slaveReconnectionTimeout` config params added
Feature - `ClusterServersConfig.readFromSlaves` config param added
Improvement - async channel reconnection
Improvement - connection acquisition in async way
Improvement - cluster slot change/migration handling
Improvement - get cluster info from new cluster nodes not defined in initial config
__Deprecated__ - `refreshConnectionAfterFails` config param
Fixed - `RList.add(pos, element)` fixed
Fixed - Publish/Subscribe message decoding under heavy load
Fixed - cluster ASK response handling
Fixed - `RMap.putAll` fixed
Fixed - parsing cluster nodes info
Fixed - NPE during Publish/Subscribe event handling
Fixed - Redisson shutdown handling
Fixed - EOFException during RLock usage with SerializationCodec (thanks to Oleg Ternovoi)
### 17-Sep-2015 - version 2.1.3 released
Feature - Ability to define `Codec` for each object
Feature - `refreshConnectionAfterFails` setting added
Feature - [AWS Elasticache ](https://aws.amazon.com/elasticache/ ) support via `Config.useElasticacheServers` method (thanks to Steve Ungerer)
Feature - `RScoredSortedSet` and `RLexSortedSet` added. Both uses native Redis Sorted Set commands. `RLexSortedSet` s stores only String objects and work with ZLEX-commands
Fixed - missed AUTH during channel reconnection
Fixed - resubscribe to subscribed topics during channel reconnection
### 05-Sep-2015 - version 2.1.2 released
Fixed - possible NPE during channel reconnection
Fixed - executeAsync freezes in cluster mode
Fixed - use same node for SCAN/SSCAN/HSCAN during iteration
Fixed - possible race-condition during master change
Fixed - `BlockingQueue.peek` race-condition
Fixed - NPE with empty sentinel servers
Fixed - unable to read `clientName` config param in Master\Slave and Sentinel modes
Fixed - "Too many open files" error in cluster mode
### 15-Aug-2015 - version 2.1.1 released
Feature - all keys operations extracted to `RKeys` interface
Feature - `RKeys.getKeys` , `RKeys.getKeysByPattern` and `RKeys.randomKey` methods added
Feature - `RBlockingQueueAsync.drainToAsync` method added
Feature - Redis nodes info and ping operations via `Redisson.getNodesGroup` or `Redisson.getClusterNodesGroup` now available
Improvement - added sentinel nodes discovery
Fixed - command encoding errors handling
Fixed - cluster empty slot handling
Fixed - connection hangs when there are no slaves in sentinel mode
Fixed - activate master as slave when there are no more available slaves in sentinel mode
Fixed - skip disconnected sentinels during startup
Fixed - slave node discovery in sentinel mode which has been disconnected since start
__Deprecated__ - Redisson methods `deleteAsync` , `delete` , `deleteByPatternAsync` , `deleteByPattern` , `findKeysByPatternAsync` , `findKeysByPattern` . Use same methods with `RKeys` interface
### 03-Aug-2015 - version 2.1.0 released
Feature - `RTopic` subscribtion/unsubscription status listener added
Feature - `RSet` : `removeRandom` and `removeRandomAsync` methods added
Improvement - `RList` : `retainAll` ,`containsAll`, `indexOf` , `lastIndexOf` optimization
__Breaking api change__ - `findKeysByPattern` response interface changed to `Collection`
__Breaking api change__ - `RTopic` message listener interface changed
Fixed - NPE during cluster mode start
Fixed - timeout timer interval calculation
Fixed - `RBatch` NPE's with very big commands list
Fixed - `RBucket.set` with timeout
### 26-Jul-2015 - version 2.0.0 released
Starting from 2.0.0 version Redisson has a new own async and lock-free Redis client under the hood. Thanks to the new architecture pipline (command batches) support has been implemented and a lot of code has gone.
Feature - new `RObject` methods: `move` , `moveAsync` , `migrate` , `migrateAsync`
Feature - new async interfaces: `RAsyncMap` , `RAtomicLongAsync` , `RBlockingQueueAsync` , `RCollectionAsync` , `RDequeAsync` , `RExpirableAsync` , `RHyperLogLogAsync` , `RListAsync` , `RObjectAsync` , `RQueueAsync` , `RScriptAsync` , `RSetAsync` , `RTopicAsync`
Feature - multiple commands batch (Redis pipelining) support via `Redisson.createBatch` method
Feature - new methods `flushall` , `deleteAsync` , `delete` , `deleteByPatternAsync` , `deleteByPattern` , `findKeysByPatternAsync` , `findKeysByPattern` added to `RedissonClient` interface
Improvement - closed channel detection speedup
### 22-Jul-2015 - version 1.3.1 released
Fixed - requests state sync during shutdown
Fixed - netty-transport-native-epoll is now has a provided scope
Fixed - NPE during `BlockingQueue.poll` invocation
### 04-Jul-2015 - version 1.3.0 released
Feature - `RQueue.pollLastAndOfferFirstTo` method added
Feature - `RObject.rename` , `RObject.renameAsync` , `RObject.renamenx` , `RObject.renamenxAsync` methods added
Feature - `RList.getAsync` , `RList.addAsync` , `RList.addAllAsync` methods added
Feature - `RObject.deleteAsync` method added
Feature - unix sockets support via `Configuration.useLinuxNativeEpoll` setting
Feature - `Redisson.getTopicPattern` method added (thanks to alex-sherwin)
Improvement - `RLock` auto-unlock then client lock-owner is gone (thanks to AndrewKolpakov)
Improvement - lua scripts used instead of multi/exec commands to avoid connection errors during execution (thanks to AndrewKolpakov)
Improvement - `RObject.delete` method now returns `boolean` status
Improvement - propagate Command processing exceptions to ConnectionManager (thanks to marko-stankovic)
Improvement - KryoCodec classes registration ability added
Fixed - slave status handling in Sentinel mode
Fixed - String codec
Fixed - Cluster ASKING command support
Fixed - `RedissonBlockingQueue#drainTo` method (thanks to Sergey Poletaev)
Fixed - Cluster.STATE.HANDSHAKE enum added
Fixed - `RedissonClient.getScript` method added
Fixed - `BlockingQueue.poll` method
Fixed - Incorrect map key encoding makes hmget return no fields when string keys are used (thanks to sammiq)
### 02-Apr-2015 - version 1.2.1 released
Feature - all redis-script commands via 'RScript' object
Feature - implementation of `java.util.concurrent.BlockingQueue` (thanks to pdeschen)
Feature - buckets load by pattern (thanks to mathieucarbou)
Improvement - IPv6 support
Improvement - `isEmpty` checks for added collections
Fixed - KryoCodec keys decoding (thanks to mathieucarbou)
Fixed - `RMap.addAndGet()` data format
Fixed - timeout support in cluster, sentinel and single connections configurations
Fixed - ClassCastException in `RedissonCountDownLatch.trySetCount`
Fixed - `RMap.replace` concurrency issue (thanks to AndrewKolpakov)
Fixed - `RLock` subscription timeout units fixed (thanks to AndrewKolpakov)
Fixed - Re-throw async exceptions (thanks to AndrewKolpakov)
### 09-Jan-2015 - version 1.2.0 released
Feature - cluster mode support
Fixed - `RList` iterator race conditions
Fixed - `RDeque.addFirst` `RDeque.addLast` methods
Fixed - OSGi support
### 16-Dec-2014 - version 1.1.7 released
Improvement - `RAtomicLong` optimization
Fixed - `RMap.fastRemove` and `RMap.getAll` methods
Fixed - `RTopic` listeners re-subscribing in sentinel mode
Fixed - `RSet.toArray` and `RSet.iterator` values order
Fixed - keys iteration in `RMap.getAll`
Fixed - `RSet` iteration
Fixed - `RAtomicLong` NPE
Fixed - infinity loop during master/slave connection acquiring
Fixed - `RedissonList.addAll` result
### 18-Nov-2014 - version 1.1.6 released
Feature - `RBucket.exists` and `RBucket.existsAsync` methods added
Feature - `RMap.addAndGet` method added
Feature - database index via `database` and operation timeout via `timeout` config params added
Improvement - `RLock` optimization
__Breaking api change__ - Redisson now uses `RedissonClient` interface
Fixed - NPE in `CommandOutput`
Fixed - unsubscribing during `RTopic.removeListener`
Fixed - all object names encoding, no more quotes
Fixed - HashedWheelTimer shutdown
Fixed - `RLock` race conditions (thanks to jsotuyod and AndrewKolpakov)
Fixed - `RCountDownLatch` race conditions
### 23-Jul-2014 - version 1.1.5 released
Feature - operations auto-retry. `retryAttempts` and `retryInterval` params added for each connection type
Feature - `RMap.filterEntries` , `RMap.getAll` , `RMap.filterKeys` , `RMap.filterValues` methods added
Feature - `RMap.fastRemove` , `RMap.fastRemoveAsync` , `RMap.fastPut` & `RMap.fastPutAsync` methods added
Fixed - async operations timeout handling
Fixed - sorting algorithm used in `RSortedSet` .
### 15-Jul-2014 - version 1.1.4 released
Feature - new `RLock.lockInterruptibly` , `RLock.tryLock` , `RLock.lock` methods with TTL support
Fixed - pub/sub connections reattach then slave/master down
Fixed - turn off connection watchdog then slave/master down
Fixed - sentinel master switch
Fixed - slave down connection closing
### 13-Jul-2014 - version 1.1.3 released
Improvement - RedissonCountDownLatch optimization
Improvement - RedissonLock optimization
Fixed - RedissonLock thread-safety
Fixed - master/slave auth using Sentinel servers
Fixed - slave down handling using Sentinel servers
### 03-Jul-2014 - version 1.1.2 released
Improvement - RedissonSet.iterator implemented with sscan
Improvement - RedissonSortedSet.iterator optimization
Feature - `RSortedSet.removeAsync` , `RSortedSet.addAsync` , `RSet.removeAsync` , RSet.addAsync methods added
Feature - slave up/down detection in Sentinel servers connection mode
Feature - new-slave automatic discovery in Sentinel servers connection mode
### 17-June-2014 - version 1.1.1 released
Feature - sentinel servers support
Fixed - connection leak in `RTopic`
Fixed - setted password not used in single server connection
### 07-June-2014 - version 1.1.0 released
Feature - master/slave connection management
Feature - simple set/get object support via `org.redisson.core.RBucket`
Feature - hyperloglog support via `org.redisson.core.RHyperLogLog`
Feature - new methods `getAsync` , `putAsync` and `removeAsync` added to `org.redisson.core.RMap`
Feature - new method `publishAsync` added to `org.redisson.core.RTopic`
Feature - [Kryo ](https://github.com/EsotericSoftware/kryo ) codec added (thanks to mathieucarbou)
__Breaking api change__ - `org.redisson.Config` model changed
Fixed - score calucaltion algorithm used in `RSortedSet` .
Fixed - `RMap.put` & `RMap.remove` result consistency fixed.
Fixed - `RTopic.publish` now returns the number of clients that received the message
Fixed - reconnection handling (thanks to renzihui)
Improvement - `org.redisson.core.RTopic` now use lazy apporach for subscribe/unsubscribe
### 04-May-2014 - version 1.0.4 released
Feature - distributed implementation of `java.util.Deque`
Feature - some objects implements `org.redisson.core.RExpirable`
Fixed - JsonJacksonCodec lazy init
### 26-Mar-2014 - version 1.0.3 released
Fixed - RedissonAtomicLong state format
Fixed - Long serialization in JsonJacksonCodec
### 05-Feb-2014 - version 1.0.2 released
Feature - distributed implementation of `java.util.SortedSet`
Fixed - OSGi compability
### 17-Jan-2014 - version 1.0.1 released
Improvement - forceUnlock, isLocked, isHeldByCurrentThread and getHoldCount methods added to RLock
Feature - connection load balancer to use multiple Redis servers
Feature - published in maven central repo
### 11-Jan-2014 - version 1.0.0 released
First stable release.