You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
redisson/CHANGELOG.md

26 KiB

Redisson Releases History

####Please Note: trunk is current development branch.

####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 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 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 toRScoredSortedSet (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 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. Use Redisson.createReactive method to access Reactive objects.

Feature - Reactive Streams 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 compression codec support
Feature - CBOR binary json codec support (thanks to lefay)
Feature - MsgPack binary json codec support
Feature - Fst serialization codec support
Feature - Snappy 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 support via Config.useElasticacheServers method (thanks to Steve Ungerer)
Feature - RScoredSortedSet and RLexSortedSet added. Both uses native Redis Sorted Set commands. RLexSortedSets 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.randomKeymethods 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 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.