Spring Data Redis Changelog
===========================

Changes in version 2.6.0-M1 (2021-07-16)
----------------------------------------
* #2122 - Upgrade to redis/jedis driver 3.6.2.
* #2119 - Upgrade to Lettuce 6.1.4.
* #2116 - Introduce factory methods to configure `LettuceConnectionFactory` from `RedisURI`.
* #2113 - Add support for `GEOSEARCH` and `GEOSEARCHSTORE`.
* #2109 - Add support for type using the SCAN command.
* #2107 - Add support for `LMOVE` and `BLMOVE`.
* #2103 - Cannot connect to Redis Sentinel using database greater 0 through Jedis.
* #2097 - Add support for `DIFF`, `ZDIFFSTORE`, `ZINTER`, and `ZUNION`.
* #2093 - Upgrade to Jedis 3.6.1.
* #2091 - Upgrade to Lettuce 6.1.3.
* #2089 - Support for TYPE parameter of SCAN command.
* #2088 - Add support for ZMSCORE and ZPOPMIN/ZPOPMAX commands.
* #2087 - Fix result sorting using Redis repository query methods.
* #2086 - Add support for `GETEX` and `GETDEL` through `getAndExpire(…)`, `getAndPersist(…)` and `getAndDelete(…)` methods.
* #2085 - Upgrade to Redis 6.2.4.
* #2081 - ValueOperation setIFAbsent with ttl not working.
* #2080 - Support findAll with sorting in derived query methods.
* #2079 - RedisCache synchronises all get(key, valueLoader) calls.
* #2078 - `LettuceStreamCommands.xRevRange` uses async dedicated connection.
* #2069 - Bump xstream from 1.4.16 to 1.4.17.
* #2064 - Upgrade to Lettuce 6.1.2.
* #2057 - Guard non-initialized `RedisConnectionFactory.getConnection()` with `IllegalStateException`.
* #2055 - Add support for BitFieldSubCommands that generate multiple bit operations using non-chaining methods.
* #2052 - Add support for `SubscriptionListener` using Pub/Sub and introduce `ReactiveRedisMessageListenerContainer.receiveLater(…)`.
* #2051 - Revise RedisCache and documentation.
* #2050 - Add support for `GETEX` and `GETDEL` through imperative and reactive `…ValueOperations`.
* #2049 - Add support for `ZRANDMEMBER` through `ZSetOperations` and `ReactiveZSetOperations`.
* #2048 - Add support for `HRANDFIELD` through `HashOperations` and `ReactiveHashOperations`.
* #2047 - Add `NOMKSTREAM` option to `XADD` command.
* #2044 - Add exclusive range query to `XPENDING` and `X[REV]RANGE`.
* #2043 - Add support for `GEOSEARCH[STORE]` through `GeoOperations` and `ReactiveGeoOperations`.
* #2041 - Add support for `ZDIFF[STORE]` commands through `ZSetOperations` and `ReactiveZSetOperations`.
* #2040 - Add support for `COPY` via `RedisOperations` and `ReactiveRedisOperations`.
* #2039 - Add support for `LMOVE` and `BLMOVE` via `ListOperations` and `ReactiveListOperations`.
* #2038 - Add support for `ZMSCORE` through variadic `ZSetOperations.score(K key, Object... o)` and `ReactiveZSetOperations`.
* #2037 - Add support for `SMISMEMBER` through variadic `SetOperations.isMember(K key, Object... o)` and `ReactiveSetOperations`.
* #2022 - Upgrade to Jedis 3.6.0.
* #2008 - Update CI to Java 16.
* #2007 - Add support for `ZPOPMIN` and `ZPOPMAX` commands including blocking variants.
* #2006 - Cannot scan binary keys with Jedis.
* #1987 - LPOP and RPOP with count option.
* #1834 - Flakey bug: PubSubTests.testContainerSubscribe fails at random times [DATAREDIS-1264].
* #1801 - Mention RedisCache locking behavior details [DATAREDIS-1228].
* #1721 - DefaultRedisCacheWriter.clean() uses blocking KEYS command [DATAREDIS-1151].


Changes in version 2.4.11 (2021-07-16)
--------------------------------------
* #2120 - Upgrade to Lettuce 6.0.7.
* #2088 - Add support for ZMSCORE and ZPOPMIN/ZPOPMAX commands.


Changes in version 2.5.2 (2021-06-22)
-------------------------------------
* #2093 - Upgrade to Jedis 3.6.1.
* #2091 - Upgrade to Lettuce 6.1.3.
* #2087 - Fix result sorting using Redis repository query methods.
* #2079 - RedisCache synchronises all get(key, valueLoader) calls.
* #2078 - `LettuceStreamCommands.xRevRange` uses async dedicated connection.
* #2069 - Bump xstream from 1.4.16 to 1.4.17.
* #2055 - Add support for BitFieldSubCommands that generate multiple bit operations using non-chaining methods.


Changes in version 2.4.10 (2021-06-22)
--------------------------------------
* #2092 - Upgrade to Lettuce 6.0.6.
* #2069 - Bump xstream from 1.4.16 to 1.4.17.


Changes in version 2.5.1 (2021-05-14)
-------------------------------------
* #2064 - Upgrade to Lettuce 6.1.2.
* #2057 - Guard non-initialized `RedisConnectionFactory.getConnection()` with `IllegalStateException`.
* #2022 - Upgrade to Jedis 3.6.0.


Changes in version 2.4.9 (2021-05-14)
-------------------------------------
* #2063 - Upgrade to Lettuce 6.0.5.


Changes in version 2.5.0 (2021-04-14)
-------------------------------------
* #2030 - Update reference documentation to set RedisConnectionFactory on RedisTemplate.
* #2028 - @CacheEvict will remove all keys of current database.
* #2026 - Upgrade to Lettuce 6.1.1.


Changes in version 2.4.8 (2021-04-14)
-------------------------------------
* #2030 - Update reference documentation to set RedisConnectionFactory on RedisTemplate.
* #2027 - Upgrade to Lettuce 6.0.4.


Changes in version 2.3.9.RELEASE (2021-04-14)
---------------------------------------------
* #2031 - Upgrade to Lettuce 5.3.7.
* #2030 - Update reference documentation to set RedisConnectionFactory on RedisTemplate.
* #2011 - Upgrade to Xstream 1.4.16.


Changes in version 2.4.7 (2021-03-31)
-------------------------------------
* #2016 - Connection proxy creation fails when using package-protected RedisConnectionProxy interface.
* #2011 - Upgrade to Xstream 1.4.16.
* #2010 - Readme lists artifacts with .RELEASE and .BUILD-SNAPSHOT suffixes.


Changes in version 2.5.0-RC1 (2021-03-31)
-----------------------------------------
* #2019 - Upgrade to Lettuce 6.1.0.RELEASE.
* #2017 - Upgrade to Jedis 3.6.0-RC1.
* #2016 - Connection proxy creation fails when using package-protected RedisConnectionProxy interface.
* #2015 - Pass-thru byte arrays in entities into `Bucket`.
* #2014 - Add limit option to ScanCursor.
* #2013 - Return AbstractRedisClient from LettuceConnectionFactory.
* #2011 - Upgrade to Xstream 1.4.16.
* #2010 - Readme lists artifacts with .RELEASE and .BUILD-SNAPSHOT suffixes.
* #1992 - Add support for CONFIG REWRITE.
* #1990 - Upgrade CI to Redis 6.2.
* #1981 - Class with @RedisHash and byte[] property is turned into Map<String, Byte>.
* #1745 - Return AbstractRedisClient from LettuceConnectionFactory [DATAREDIS-1170].
* #1711 - Add support to Redis Streams using Jedis Client [DATAREDIS-1140].
* #1575 - Add limit option to ScanCursor. [DATAREDIS-1004].
* #1560 - Provide TLS support for Sentinel clients in Jedis driver [DATAREDIS-989].


Changes in version 2.5.0-M5 (2021-03-17)
----------------------------------------
* #2002 - Upgrade to Lettuce 6.1.0 RC1.
* #1999 - Upgrade to Jedis 3.5.2.
* #1998 - JedisClusterZSetCommands. reverseRangeByLex parameter order issue.
* #1997 - Update build to force snapshot updates.
* #1996 - Consider target type when calling getAllOf(…).
* #1995 - @TypeAlias used in sub objects only works for save not load.
* #1991 - Accept cluster nodes without hostname.
* #1986 - Use Jedis SetParams.KEEPTTL instead of injecting byte[] args.
* #1985 - Empty IP address in cluster nodes output causes Hostname must not be empty or null.
* #1982 - Improved performance of Bucket.extract().
* #1979 - No enum constant io.lettuce.core.protocol.CommandType.GIS.CONTAINS.
* #1964 - Reference documentation shows usage of deprecated code.
* #1794 - ifAbsent support with ZsetOperations [DATAREDIS-1235].
* #1711 - Add support to Redis Streams using Jedis Client [DATAREDIS-1140].
* #526 - Add support for microseconds using TIME.


Changes in version 2.4.6 (2021-03-17)
-------------------------------------
* #2001 - Upgrade to Lettuce 6.0.3.
* #1998 - JedisClusterZSetCommands. reverseRangeByLex parameter order issue.
* #1997 - Update build to force snapshot updates.
* #1991 - Accept cluster nodes without hostname.
* #1982 - Improved performance of Bucket.extract().
* #1979 - No enum constant io.lettuce.core.protocol.CommandType.GIS.CONTAINS.
* #1964 - Reference documentation shows usage of deprecated code.


Changes in version 2.3.8.RELEASE (2021-03-17)
---------------------------------------------
* #1991 - Accept cluster nodes without hostname.
* #1979 - No enum constant io.lettuce.core.protocol.CommandType.GIS.CONTAINS.
* #1964 - Reference documentation shows usage of deprecated code.


Changes in version 2.5.0-M4 (2021-02-18)
----------------------------------------


Changes in version 2.4.5 (2021-02-18)
-------------------------------------


Changes in version 2.5.0-M3 (2021-02-17)
----------------------------------------
* #1969 - Preserve order in SetConverter.
* #1967 - Upgrade to Lettuce 6.1.0 M1.
* #1961 - DATAREDIS-1955 - Phantom copy is not persisted when entity ttl is changed from positive to negative, causing phantom copy not updated to no expire and counting down, then RedisKeyExpiredEvent publishing.
* #1960 - Remove superfluous try catch blocks from Jedis*Commands.
* #1957 - Add support for LPOS using Jedis.
* #1955 - RedisKeyExpiredEvent is published when entity expiring was changed from positive to -1, resulting in dropping meta information (indexes etc).
* #1954 - Upgrade to Commons Pool 2.9.0.
* #1951 - Remove superfluous try catch blocks from Jedis*Commands.
* #1950 - Upgrade to Jedis 3.5.1.
* #1948 - Introduce LettuceInvoker.
* #1816 - Add support for removeRangeByLex in ZSetOperations [DATAREDIS-1244].
* #1797 - Remove superfluous try catch blocks from Lettuce*Commands [DATAREDIS-1224].
* #1779 - Update repository after GitHub issues migration.


Changes in version 2.4.4 (2021-02-17)
-------------------------------------
* #1969 - Preserve order in SetConverter.
* #1961 - DATAREDIS-1955 - Phantom copy is not persisted when entity ttl is changed from positive to negative, causing phantom copy not updated to no expire and counting down, then RedisKeyExpiredEvent publishing.
* #1955 - RedisKeyExpiredEvent is published when entity expiring was changed from positive to -1, resulting in dropping meta information (indexes etc).


Changes in version 2.3.7.RELEASE (2021-02-17)
---------------------------------------------
* DATAREDIS-1263 - Kotlin code fails to compile on JDK 15.
* #1970 - Include Bintray plugin repository.
* #1969 - Preserve order in SetConverter.
* #1961 - DATAREDIS-1955 - Phantom copy is not persisted when entity ttl is changed from positive to negative, causing phantom copy not updated to no expire and counting down, then RedisKeyExpiredEvent publishing.
* #1955 - RedisKeyExpiredEvent is published when entity expiring was changed from positive to -1, resulting in dropping meta information (indexes etc).
* #1942 - Update copyright year to 2021.
* #1941 - Upgrade to Lettuce 5.3.6.RELEASE.
* #1939 - Upgrade to xstream 1.4.15.
* #1779 - Update repository after GitHub issues migration.


Changes in version 2.2.13.RELEASE (2021-02-17)
----------------------------------------------
* #1970 - Include Bintray plugin repository.
* #1942 - Update copyright year to 2021.
* #1939 - Upgrade to xstream 1.4.15.
* #1779 - Update repository after GitHub issues migration.


Changes in version 2.5.0-M2 (2021-01-13)
----------------------------------------
* DATAREDIS-1263 - Kotlin code fails to compile on JDK 15.
* DATAREDIS-1258 - Update CI jobs with Docker Login.
* #1942 - Update copyright year to 2021.
* #1940 - Upgrade to Lettuce 6.0.2.RELEASE.
* #1939 - Upgrade to xstream 1.4.15.
* #1779 - Update repository after GitHub issues migration.


Changes in version 2.4.3 (2021-01-13)
-------------------------------------
* DATAREDIS-1263 - Kotlin code fails to compile on JDK 15.
* DATAREDIS-1258 - Update CI jobs with Docker Login.
* #1942 - Update copyright year to 2021.
* #1940 - Upgrade to Lettuce 6.0.2.RELEASE.
* #1939 - Upgrade to xstream 1.4.15.
* #1779 - Update repository after GitHub issues migration.


Changes in version 2.4.2 (2020-12-09)
-------------------------------------
* DATAREDIS-1257 - Fix converter documentation for repository support.
* DATAREDIS-1254 - Upgrade to Xstream 1.4.14.
* DATAREDIS-1249 - Release 2.4.2 (2020.0.2).
* DATAREDIS-1230 - Reactive StreamReceiver fails on serialization exception and does not process subsequent messages.
* DATAREDIS-891 - Enabling transactional support in RedisTemplate binds connection to TransactionSynchronizationManager even without transaction.


Changes in version 2.5.0-M1 (2020-12-09)
----------------------------------------
* DATAREDIS-1257 - Fix converter documentation for repository support.
* DATAREDIS-1254 - Upgrade to Xstream 1.4.14.
* DATAREDIS-1248 - Use fresh JedisConnectionFactory in PubSubTests.
* DATAREDIS-1246 - DefaultStreamReceiver.StreamSubscription's onStreamMessage() uses unimplemented method.
* DATAREDIS-1245 - RedisScript<ArrayList> return type interpreted as VALUE.
* DATAREDIS-1242 - Release 2.5 M1 (2021.0.0).
* DATAREDIS-1230 - Reactive StreamReceiver fails on serialization exception and does not process subsequent messages.
* DATAREDIS-891 - Enabling transactional support in RedisTemplate binds connection to TransactionSynchronizationManager even without transaction.


Changes in version 2.3.6.RELEASE (2020-12-09)
---------------------------------------------
* DATAREDIS-1257 - Fix converter documentation for repository support.
* DATAREDIS-1254 - Upgrade to Xstream 1.4.14.
* DATAREDIS-1246 - DefaultStreamReceiver.StreamSubscription's onStreamMessage() uses unimplemented method.
* DATAREDIS-1245 - RedisScript<ArrayList> return type interpreted as VALUE.
* DATAREDIS-1240 - Release 2.3.6 (Neumann SR6).


Changes in version 2.2.12.RELEASE (2020-12-09)
----------------------------------------------
* DATAREDIS-1257 - Fix converter documentation for repository support.
* DATAREDIS-1254 - Upgrade to Xstream 1.4.14.
* DATAREDIS-1246 - DefaultStreamReceiver.StreamSubscription's onStreamMessage() uses unimplemented method.
* DATAREDIS-1245 - RedisScript<ArrayList> return type interpreted as VALUE.
* DATAREDIS-1239 - Release 2.2.12 (Moore SR12).


Changes in version 2.4.1 (2020-11-11)
-------------------------------------
* DATAREDIS-1248 - Use fresh JedisConnectionFactory in PubSubTests.
* DATAREDIS-1246 - DefaultStreamReceiver.StreamSubscription's onStreamMessage() uses unimplemented method.
* DATAREDIS-1245 - RedisScript<ArrayList> return type interpreted as VALUE.
* DATAREDIS-1241 - Release 2.4.1 (2020.0.1).


Changes in version 2.4.0 (2020-10-28)
-------------------------------------
* DATAREDIS-1237 - Upgrade to Lettuce 6.0.1.RELEASE.
* DATAREDIS-1234 - LPOS command result not consistent.
* DATAREDIS-1233 - Migrate tests to JUnit 5.
* DATAREDIS-1232 - Release 2.4 GA (2020.0.0).
* DATAREDIS-1212 - Reduce memory allocation when retrieving message content.


Changes in version 2.3.5.RELEASE (2020-10-28)
---------------------------------------------
* DATAREDIS-1238 - Upgrade to Lettuce 5.3.5.RELEASE.
* DATAREDIS-1231 - Use Jedis command routing if multiple BRPOP keys map to a single slot.
* DATAREDIS-1225 - Fix typos in reference documentation.
* DATAREDIS-1222 - DefaultStringRedisConnection#zRangeByLex(String, Range, Limit) ignores the limit parameter.
* DATAREDIS-1218 - Release 2.3.5 (Neumann SR5).
* DATAREDIS-1214 - Get a NullPointerException when using the geodist command of redis.
* DATAREDIS-1212 - Reduce memory allocation when retrieving message content.


Changes in version 2.2.11.RELEASE (2020-10-28)
----------------------------------------------
* DATAREDIS-1231 - Use Jedis command routing if multiple BRPOP keys map to a single slot.
* DATAREDIS-1225 - Fix typos in reference documentation.
* DATAREDIS-1222 - DefaultStringRedisConnection#zRangeByLex(String, Range, Limit) ignores the limit parameter.
* DATAREDIS-1217 - Release 2.2.11 (Moore SR11).
* DATAREDIS-1214 - Get a NullPointerException when using the geodist command of redis.
* DATAREDIS-1212 - Reduce memory allocation when retrieving message content.


Changes in version 2.1.21.RELEASE (2020-10-28)
----------------------------------------------
* DATAREDIS-1236 - Release 2.1.21 (Lovelace SR21).


Changes in version 2.4.0-RC2 (2020-10-14)
-----------------------------------------
* DATAREDIS-1231 - Use Jedis command routing if multiple BRPOP keys map to a single slot.
* DATAREDIS-1226 - Add support for xClaimJustId.
* DATAREDIS-1225 - Fix typos in reference documentation.
* DATAREDIS-1223 - Upgrade to Lettuce 6.0 GA.
* DATAREDIS-1222 - DefaultStringRedisConnection#zRangeByLex(String, Range, Limit) ignores the limit parameter.
* DATAREDIS-1219 - Release 2.4 RC2 (2020.0.0).
* DATAREDIS-1214 - Get a NullPointerException when using the geodist command of redis.
* DATAREDIS-1103 - Support new KEEPTTL option of the SET operation.
* DATAREDIS-729 - Support reverseRangeByLex and lexCount commands.


Changes in version 2.4.0-RC1 (2020-09-16)
-----------------------------------------
* DATAREDIS-1215 - Upgrade to Lettuce 6.0-RC2.
* DATAREDIS-1210 - StreamReadOptions toString method cause StackOverflowError due to endless loop.
* DATAREDIS-1207 - LettuceStreamCommands.xRevRange incorrectly converts Ranges.
* DATAREDIS-1201 - Release 2.4 RC1 (2020.0.0).
* DATAREDIS-1197 - Upgrade to Lettuce 6.0 RC1.
* DATAREDIS-1196 - Add support for LPOS command.
* DATAREDIS-1145 - Support Sentinel password for Jedis.
* DATAREDIS-1136 - Upgrade CI Build to Redis 6.0.0.
* DATAREDIS-1085 - Add approximate trim support for XTRIM.
* DATAREDIS-1046 - Implement Redis 6.0 ACL in Spring Data.


Changes in version 2.3.4.RELEASE (2020-09-16)
---------------------------------------------
* DATAREDIS-1216 - Upgrade to Lettuce 5.3.4.RELEASE.
* DATAREDIS-1207 - LettuceStreamCommands.xRevRange incorrectly converts Ranges.
* DATAREDIS-1202 - Release 2.3.4 (Neumann SR4).


Changes in version 2.2.10.RELEASE (2020-09-16)
----------------------------------------------
* DATAREDIS-1207 - LettuceStreamCommands.xRevRange incorrectly converts Ranges.
* DATAREDIS-1195 - DefaultRedisCacheWriter.putIfAbsent may not set the TTL if the connection drops.
* DATAREDIS-1191 - Redis repository returns empty object instead of Optional.Empty().
* DATAREDIS-1190 - Cluster rename fails when targetKey already exists on target node.
* DATAREDIS-1189 - No subscription retry when using a connection pool.
* DATAREDIS-1187 - Release 2.2.10 (Moore SR10).


Changes in version 2.1.20.RELEASE (2020-09-16)
----------------------------------------------
* DATAREDIS-1190 - Cluster rename fails when targetKey already exists on target node.
* DATAREDIS-1186 - Release 2.1.20 (Lovelace SR20).


Changes in version 2.3.3.RELEASE (2020-08-12)
---------------------------------------------
* DATAREDIS-1199 - Upgrade to Lettuce 5.3.3.
* DATAREDIS-1195 - DefaultRedisCacheWriter.putIfAbsent may not set the TTL if the connection drops.
* DATAREDIS-1191 - Redis repository returns empty object instead of Optional.Empty().
* DATAREDIS-1190 - Cluster rename fails when targetKey already exists on target node.
* DATAREDIS-1189 - No subscription retry when using a connection pool.
* DATAREDIS-1188 - Release 2.3.3 (Neumann SR3).


Changes in version 2.4.0-M2 (2020-08-12)
----------------------------------------
* DATAREDIS-1199 - Upgrade to Lettuce 5.3.3.
* DATAREDIS-1198 - Move off deprecated Spring Framework API.
* DATAREDIS-1195 - DefaultRedisCacheWriter.putIfAbsent may not set the TTL if the connection drops.
* DATAREDIS-1191 - Redis repository returns empty object instead of Optional.Empty().
* DATAREDIS-1190 - Cluster rename fails when targetKey already exists on target node.
* DATAREDIS-1189 - No subscription retry when using a connection pool.
* DATAREDIS-1181 - Upgrade to Lettuce 5.3.2.
* DATAREDIS-1179 - ObjectHashMapper not able to resolve type alias.
* DATAREDIS-1178 - Scan method on ReactiveSetOperations ignores ScanOptions parameter.
* DATAREDIS-1177 - Upgrade to xstream 1.4.12.
* DATAREDIS-1175 - Unable to read a List from a Redis Stream.
* DATAREDIS-1174 - Release 2.4 M2 (2020.0.0).
* DATAREDIS-1173 - Close connection unsubscribes from all channels incorrectly using Lettuce.
* DATAREDIS-1172 - StreamReceiverOptionsBuilder.hashValueSerializer mis-typed.
* DATAREDIS-1091 - Use of TTL doubles data footprint with phantom records.
* DATAREDIS-1082 - Expose cache metrics for RedisCache.


Changes in version 2.3.2.RELEASE (2020-07-22)
---------------------------------------------
* DATAREDIS-1181 - Upgrade to Lettuce 5.3.2.
* DATAREDIS-1179 - ObjectHashMapper not able to resolve type alias.
* DATAREDIS-1178 - Scan method on ReactiveSetOperations ignores ScanOptions parameter.
* DATAREDIS-1177 - Upgrade to xstream 1.4.12.
* DATAREDIS-1175 - Unable to read a List from a Redis Stream.
* DATAREDIS-1173 - Close connection unsubscribes from all channels incorrectly using Lettuce.
* DATAREDIS-1172 - StreamReceiverOptionsBuilder.hashValueSerializer mis-typed.
* DATAREDIS-1168 - Release 2.3.2 (Neumann SR2).
* DATAREDIS-1150 - Add reactive variant of RedisClusterCommands.


Changes in version 2.2.9.RELEASE (2020-07-22)
---------------------------------------------
* DATAREDIS-1178 - Scan method on ReactiveSetOperations ignores ScanOptions parameter.
* DATAREDIS-1177 - Upgrade to xstream 1.4.12.
* DATAREDIS-1175 - Unable to read a List from a Redis Stream.
* DATAREDIS-1173 - Close connection unsubscribes from all channels incorrectly using Lettuce.
* DATAREDIS-1167 - Release 2.2.9 (Moore SR9).


Changes in version 2.1.19.RELEASE (2020-07-22)
----------------------------------------------
* DATAREDIS-1178 - Scan method on ReactiveSetOperations ignores ScanOptions parameter.
* DATAREDIS-1173 - Close connection unsubscribes from all channels incorrectly using Lettuce.
* DATAREDIS-1166 - Release 2.1.19 (Lovelace SR19).


Changes in version 2.4.0-M1 (2020-06-25)
----------------------------------------
* DATAREDIS-1165 - Use standard Spring code of conduct.
* DATAREDIS-1164 - Upgrade to Lettuce 5.3.1.RELEASE.
* DATAREDIS-1161 - DefaultReactiveHashOperations.readHashValue might return null.
* DATAREDIS-1159 - RedisStaticMasterReplicaConfiguration.node(String hostName) should return RedisStaticMasterReplicaConfiguration.
* DATAREDIS-1150 - Add reactive variant of RedisClusterCommands.
* DATAREDIS-1147 - Release 2.4 M1 (2020.0.0).
* DATAREDIS-1143 - Delombok source files.
* DATAREDIS-911 - Spring data redis is not working for custom converter.


Changes in version 2.3.1.RELEASE (2020-06-10)
---------------------------------------------
* DATAREDIS-1164 - Upgrade to Lettuce 5.3.1.RELEASE.
* DATAREDIS-1161 - DefaultReactiveHashOperations.readHashValue might return null.
* DATAREDIS-1159 - RedisStaticMasterReplicaConfiguration.node(String hostName) should return RedisStaticMasterReplicaConfiguration.
* DATAREDIS-1146 - Release 2.3.1 (Neumann SR1).


Changes in version 2.2.8.RELEASE (2020-06-10)
---------------------------------------------
* DATAREDIS-1161 - DefaultReactiveHashOperations.readHashValue might return null.
* DATAREDIS-1142 - "CROSSSLOT Keys in request don't hash to the same slot" error using Spring Data along with Spring Session while OAuth2 login process.
* DATAREDIS-1139 - org.springframework.data.redis.core.RedisCommand Constant.
* DATAREDIS-1138 - ReactiveStreamCommands hangs with indefinite block.
* DATAREDIS-1137 - Remove Travis CI.
* DATAREDIS-1134 - Release 2.2.8 (Moore SR8).


Changes in version 2.1.18.RELEASE (2020-06-10)
----------------------------------------------
* DATAREDIS-1161 - DefaultReactiveHashOperations.readHashValue might return null.
* DATAREDIS-1137 - Remove Travis CI.
* DATAREDIS-1133 - Release 2.1.18 (Lovelace SR18).


Changes in version 2.3.0.RELEASE (2020-05-12)
---------------------------------------------
* DATAREDIS-1144 - Upgrade to Jedis 3.3.0.
* DATAREDIS-1142 - "CROSSSLOT Keys in request don't hash to the same slot" error using Spring Data along with Spring Session while OAuth2 login process.
* DATAREDIS-1139 - org.springframework.data.redis.core.RedisCommand Constant.
* DATAREDIS-1138 - ReactiveStreamCommands hangs with indefinite block.
* DATAREDIS-1137 - Remove Travis CI.
* DATAREDIS-1135 - Release 2.3 GA (Neumann).
* DATAREDIS-1042 - Add MKSTREAM support.


Changes in version 2.3.0.RC2 (2020-04-28)
-----------------------------------------
* DATAREDIS-1132 - Upgrade to Netty 4.1.49.Final.
* DATAREDIS-1128 - Improve test stability.
* DATAREDIS-1127 - JedisConnectionFactory getSentinelConnection method fails if first sentinel host in the list of sentinel hosts is down/unreachable.
* DATAREDIS-1124 - Release 2.3 RC2 (Neumann).
* DATAREDIS-1122 - Add support for MAXLEN attribute of XADD.
* DATAREDIS-1119 - Complete the Redis Stream Operations.
* DATAREDIS-1118 - Provide support to change the RedisCacheWriter on the RedisCacheManager.RedisCacheManagerBuilder.
* DATAREDIS-1112 - Upgrade to Lettuce 5.3.
* DATAREDIS-1106 - Phantom key not removed when deleting an item.


Changes in version 2.2.7.RELEASE (2020-04-28)
---------------------------------------------
* DATAREDIS-1132 - Upgrade to Netty 4.1.49.Final.
* DATAREDIS-1127 - JedisConnectionFactory getSentinelConnection method fails if first sentinel host in the list of sentinel hosts is down/unreachable.
* DATAREDIS-1121 - Add missing anchors.
* DATAREDIS-1120 - Release 2.2.7 (Moore SR7).


Changes in version 2.1.17.RELEASE (2020-04-28)
----------------------------------------------
* DATAREDIS-1127 - JedisConnectionFactory getSentinelConnection method fails if first sentinel host in the list of sentinel hosts is down/unreachable.
* DATAREDIS-1121 - Add missing anchors.
* DATAREDIS-1107 - Release 2.1.17 (Lovelace SR17).


Changes in version 2.3.0.RC1 (2020-03-31)
-----------------------------------------
* DATAREDIS-1121 - Add missing anchors.
* DATAREDIS-1115 - Reduce log level for shared connection renewal.
* DATAREDIS-1114 - Release 2.3 RC1 (Neumann).


Changes in version 2.2.6.RELEASE (2020-03-25)
---------------------------------------------
* DATAREDIS-1115 - Reduce log level for shared connection renewal.
* DATAREDIS-1110 - Wrong type parameter in StreamMessageListenerContainerOptionsBuilder.hashValueSerializer().
* DATAREDIS-1108 - Release 2.2.6 (Moore SR6).


Changes in version 2.3.0.M4 (2020-03-11)
----------------------------------------
* DATAREDIS-1111 - Add missing list and zset coroutine extensions.
* DATAREDIS-1110 - Wrong type parameter in StreamMessageListenerContainerOptionsBuilder.hashValueSerializer().
* DATAREDIS-1105 - Fix typo on RedisTemplate javadoc.
* DATAREDIS-1104 - RedisTemplate executing exception is swallowed when release connection errors.
* DATAREDIS-1101 - Improve reference documentation.
* DATAREDIS-1099 - Release 2.3 M4 (Neumann).
* DATAREDIS-1093 - ClassCastException when doing pub/sub from RedisStaticMasterReplicaConfiguration.
* DATAREDIS-1084 - Consider adding support for XPENDING and XCLAIM.
* DATAREDIS-1080 - RedisAtomicInteger remove existing key when a value for initialValue is provided.
* DATAREDIS-1011 - Lettuce pipelining behaviour is different than Jedis pipelining.
* DATAREDIS-450 - PoolConfig is deprecated and descriptions says it will be removed in 1.4.


Changes in version 2.2.5.RELEASE (2020-02-26)
---------------------------------------------
* DATAREDIS-1105 - Fix typo on RedisTemplate javadoc.
* DATAREDIS-1104 - RedisTemplate executing exception is swallowed when release connection errors.
* DATAREDIS-1098 - Upgrade to Lettuce 5.2.2.
* DATAREDIS-1097 - Improve synchronization on failure in StreamMessageListenerContainer.
* DATAREDIS-1095 - ReactiveRedisConnection close is blocking.
* DATAREDIS-1093 - ClassCastException when doing pub/sub from RedisStaticMasterReplicaConfiguration.
* DATAREDIS-1089 - Release 2.2.5 (Moore SR5).
* DATAREDIS-1080 - RedisAtomicInteger remove existing key when a value for initialValue is provided.
* DATAREDIS-1079 - StreamMessageListenerContainer autoAck does not work.
* DATAREDIS-450 - PoolConfig is deprecated and descriptions says it will be removed in 1.4.


Changes in version 2.1.16.RELEASE (2020-02-26)
----------------------------------------------
* DATAREDIS-1105 - Fix typo on RedisTemplate javadoc.
* DATAREDIS-1104 - RedisTemplate executing exception is swallowed when release connection errors.
* DATAREDIS-1095 - ReactiveRedisConnection close is blocking.
* DATAREDIS-1093 - ClassCastException when doing pub/sub from RedisStaticMasterReplicaConfiguration.
* DATAREDIS-1088 - Release 2.1.16 (Lovelace SR16).
* DATAREDIS-1080 - RedisAtomicInteger remove existing key when a value for initialValue is provided.


Changes in version 2.3.0.M3 (2020-02-12)
----------------------------------------
* DATAREDIS-1098 - Upgrade to Lettuce 5.2.2.
* DATAREDIS-1097 - Improve synchronization on failure in StreamMessageListenerContainer.
* DATAREDIS-1096 - Move off deprecated Lettuce API.
* DATAREDIS-1095 - ReactiveRedisConnection close is block.
* DATAREDIS-1092 - Release 2.3 M3 (Neumann).
* DATAREDIS-1079 - StreamMessageListenerContainer autoAck does not work.
* DATAREDIS-611 - Improve Template API by using Java 8 types.
* DATAREDIS-538 - Non-public inner classes causes IllegalAccessException when accessing @TimeToLive methods.


Changes in version 2.3.0.M2 (2020-01-17)
----------------------------------------
* DATAREDIS-1090 - Release 2.3 M2 (Neumann).


Changes in version 2.3.0.M1 (2020-01-16)
----------------------------------------
* DATAREDIS-1086 - Upgrade to Jedis 3.2.0.
* DATAREDIS-1083 - Update copyright years to 2020.
* DATAREDIS-1070 - Fix comment on ZSetOperations.reverseRangeByScore.
* DATAREDIS-1067 - Documentation for MappingConfiguration uses wrong arguments.
* DATAREDIS-1066 - Improve documentation for Jedis pooling configuration.
* DATAREDIS-1064 - ListOperations.rPush/lPush with pivot comments wrong.
* DATAREDIS-1063 - Enable building with JDK11+.
* DATAREDIS-1062 - Disable select database command before executing each command.
* DATAREDIS-1060 - Redis password should not automatically be applied to sentinel.
* DATAREDIS-1058 - Typo in assert message.
* DATAREDIS-1055 - Upgrade to Lettuce 5.2.1.
* DATAREDIS-1053 - ListenToChannel doesn't close connection / channels on doFinally.
* DATAREDIS-1049 - Exception raised when use empty string with keyspaceNotificationsConfigParameter with @EnableRedisRepositories annotation.
* DATAREDIS-1048 - typo: xml tag incomplete.
* DATAREDIS-1045 - Redis Sentinel Authentication not supported.
* DATAREDIS-1041 - RedisCacheConfiguration.prefixKeysWith(…)  does not consider cache name.
* DATAREDIS-1040 - Release 2.3 M1 (Neumann).
* DATAREDIS-367 - RedisConnection extend AutoCloseable for try-with-resources.


Changes in version 2.2.4.RELEASE (2020-01-15)
---------------------------------------------
* DATAREDIS-1083 - Update copyright years to 2020.
* DATAREDIS-1074 - Release 2.2.4 (Moore SR4).


Changes in version 2.1.15.RELEASE (2020-01-15)
----------------------------------------------
* DATAREDIS-1083 - Update copyright years to 2020.
* DATAREDIS-1073 - Release 2.1.15 (Lovelace SR15).


Changes in version 2.2.3.RELEASE (2019-12-04)
---------------------------------------------
* DATAREDIS-1070 - Fix comment on ZSetOperations.reverseRangeByScore.
* DATAREDIS-1069 - Release 2.2.3 (Moore SR3).
* DATAREDIS-1062 - Disable select database command before executing each command.
* DATAREDIS-1055 - Upgrade to Lettuce 5.2.1.


Changes in version 2.1.14.RELEASE (2019-12-04)
----------------------------------------------
* DATAREDIS-1070 - Fix comment on ZSetOperations.reverseRangeByScore.
* DATAREDIS-1068 - Release 2.1.14 (Lovelace SR14).


Changes in version 2.2.2.RELEASE (2019-11-18)
---------------------------------------------
* DATAREDIS-1067 - Documentation for MappingConfiguration uses wrong arguments.
* DATAREDIS-1066 - Improve documentation for Jedis pooling configuration.
* DATAREDIS-1064 - ListOperations.rPush/lPush with pivot comments wrong.
* DATAREDIS-1060 - Redis password should not automatically be applied to sentinel.
* DATAREDIS-1059 - Release 2.2.2 (Moore SR2).
* DATAREDIS-1058 - Typo in assert message.


Changes in version 2.1.13.RELEASE (2019-11-18)
----------------------------------------------
* DATAREDIS-1067 - Documentation for MappingConfiguration uses wrong arguments.
* DATAREDIS-1066 - Improve documentation for Jedis pooling configuration.
* DATAREDIS-1064 - ListOperations.rPush/lPush with pivot comments wrong.
* DATAREDIS-1058 - Typo in assert message.
* DATAREDIS-1057 - Release 2.1.13 (Lovelace SR13).


Changes in version 2.2.1.RELEASE (2019-11-04)
---------------------------------------------
* DATAREDIS-1055 - Upgrade to Lettuce 5.2.1.
* DATAREDIS-1053 - ListenToChannel doesn't close connection / channels on doFinally.
* DATAREDIS-1049 - Exception raised when use empty string with keyspaceNotificationsConfigParameter with @EnableRedisRepositories annotation.
* DATAREDIS-1048 - typo: xml tag incomplete.
* DATAREDIS-1045 - Redis Sentinel Authentication not supported.
* DATAREDIS-1039 - Release 2.2.1 (Moore SR1).


Changes in version 2.1.12.RELEASE (2019-11-04)
----------------------------------------------
* DATAREDIS-1053 - ListenToChannel doesn't close connection / channels on doFinally.
* DATAREDIS-1048 - typo: xml tag incomplete.
* DATAREDIS-1038 - Release 2.1.12 (Lovelace SR12).


Changes in version 2.2.0.RELEASE (2019-09-30)
---------------------------------------------
* DATAREDIS-1037 - Remove @ExperimentalCoroutinesApi annotations.
* DATAREDIS-1036 - Upgrade to Netty 4.1.42.Final.
* DATAREDIS-1035 - Improve documentation.
* DATAREDIS-1034 - RedisTemplate.opsFor* methods not thread-safe.
* DATAREDIS-1033 - Add Kotlin Flow based extensions.
* DATAREDIS-1023 - Release 2.2 GA (Moore).
* DATAREDIS-998 - Upgrade to Lettuce 5.2.0.
* DATAREDIS-974 - Add SSL support for Redis Cluster using jedis.
* DATAREDIS-575 - Support client name for JedisCluster.


Changes in version 2.1.11.RELEASE (2019-09-30)
----------------------------------------------
* DATAREDIS-1035 - Improve documentation.
* DATAREDIS-1034 - RedisTemplate.opsFor* methods not thread-safe.
* DATAREDIS-1032 - RedisCache fails to serialize non SimpleKey cache keys.
* DATAREDIS-1031 - LettuceReactiveKeyCommands.pExpireAt calls EXPIREAT command instead of PEXPIREAT.
* DATAREDIS-1027 - LettuceConnectionFactory.destroy() should release reactiveConnectionProvider resources.
* DATAREDIS-1025 - Add HTTPS entries into spring.schemas.
* DATAREDIS-1022 - Release 2.1.11 (Lovelace SR11).
* DATAREDIS-1021 - JedisKeyCommands.del asset error.


Changes in version 2.2.0.RC3 (2019-09-06)
-----------------------------------------
* DATAREDIS-1032 - RedisCache fails to serialize non SimpleKey cache keys.
* DATAREDIS-1031 - LettuceReactiveKeyCommands.pExpireAt calls EXPIREAT command instead of PEXPIREAT.
* DATAREDIS-1030 - RedisScript of method improvement.
* DATAREDIS-1027 - LettuceConnectionFactory.destroy() should release reactiveConnectionProvider resources.
* DATAREDIS-1025 - Add HTTPS entries into spring.schemas.
* DATAREDIS-1024 - Release 2.2 RC3 (Moore).
* DATAREDIS-1021 - JedisKeyCommands.del asset error.


Changes in version 2.2.0.RC2 (2019-08-05)
-----------------------------------------
* DATAREDIS-1020 - Upgrade to Lettuce 5.1.8.RELEASE.
* DATAREDIS-1019 - Upgrade to Commons Pool 2.7.0.
* DATAREDIS-1018 - Inherit Jackson dependency versions from BOM and parent POM.
* DATAREDIS-1015 - Upgrade to Jedis 3.1.0.
* DATAREDIS-1013 - Wrong minArgs and maxArgs values for SELECT redis command.
* DATAREDIS-1012 - Revise readme for a consistent structure.
* DATAREDIS-1009 - StreamReadRequest and StreamMessageListenerContainerOptions builder methods are package-private.
* DATAREDIS-1008 - Fix command reference in Javadoc.
* DATAREDIS-1005 - Add support for scripting commands with Jedis Cluster.
* DATAREDIS-1001 - Jackson2HashMapper does not serialize Date/Calender fields when flatten = true.
* DATAREDIS-1000 - Should use SerializationPair<byte[]> in method RedisSerializationContext#raw.
* DATAREDIS-999 - ReactiveRedisConnection close method is blocking.
* DATAREDIS-997 - Release 2.2 RC2 (Moore).
* DATAREDIS-993 - Object serialization as HashValue with StreamOperations.
* DATAREDIS-992 - AbstractOperations: bitwise AND in place of logical AND.
* DATAREDIS-990 - Provide TLS support for Sentinel clients in Lettuce driver.
* DATAREDIS-988 - Command timed out if execute multi/exec in readonly database transaction.
* DATAREDIS-985 - Introduce Jenkins CI.
* DATAREDIS-976 - Allow extension of Lettuce Connection and Subscription classes.
* DATAREDIS-793 - Use GETRANGE instead of SUBSTR command.
* DATAREDIS-639 - Unify logging framework usage.
* DATAREDIS-588 - Use JedisCluster.psetex() in JedisClusterStringCommands.pSetEx() instead own dispatch via Jedis.
* DATAREDIS-549 - Migrate to AssertJ.


Changes in version 2.1.10.RELEASE (2019-08-05)
----------------------------------------------
* DATAREDIS-1020 - Upgrade to Lettuce 5.1.8.RELEASE.
* DATAREDIS-1018 - Inherit Jackson dependency versions from BOM and parent POM.
* DATAREDIS-1013 - Wrong minArgs and maxArgs values for SELECT redis command.
* DATAREDIS-1008 - Fix command reference in Javadoc.
* DATAREDIS-1001 - Jackson2HashMapper does not serialize Date/Calender fields when flatten = true.
* DATAREDIS-996 - Release 2.1.10 (Lovelace SR10).
* DATAREDIS-992 - AbstractOperations: bitwise AND in place of logical AND.
* DATAREDIS-988 - Command timed out if execute multi/exec in readonly database transaction.
* DATAREDIS-985 - Introduce Jenkins CI.


Changes in version 1.8.23.RELEASE (2019-08-05)
----------------------------------------------
* DATAREDIS-985 - Introduce Jenkins CI.
* DATAREDIS-984 - Release 1.8.23 (Ingalls SR23).
* DATAREDIS-955 - Problems when deserializing an empty list with RedisHash.


Changes in version 2.2.0.RC1 (2019-06-14)
-----------------------------------------
* DATAREDIS-987 - Create security policy readme.
* DATAREDIS-973 - LettuceConnectionFactory does not select database on reactive connections.
* DATAREDIS-966 - Release 2.2 RC1 (Moore).
* DATAREDIS-955 - Problems when deserializing an empty list with RedisHash.


Changes in version 2.1.9.RELEASE (2019-06-14)
---------------------------------------------
* DATAREDIS-983 - Release 2.1.9 (Lovelace SR9).
* DATAREDIS-973 - LettuceConnectionFactory does not select database on reactive connections.
* DATAREDIS-955 - Problems when deserializing an empty list with RedisHash.


Changes in version 1.8.22.RELEASE (2019-05-13)
----------------------------------------------
* DATAREDIS-980 - Release 1.8.22 (Ingalls SR22).


Changes in version 2.1.8.RELEASE (2019-05-13)
---------------------------------------------
* DATAREDIS-979 - Release 2.1.8 (Lovelace SR8).


Changes in version 2.2.0.M4 (2019-05-13)
----------------------------------------
* DATAREDIS-982 - Upgrade to Redis 5.0.4.
* DATAREDIS-981 - XRANGE with COUNT -1 option no longer works on Redis 5.0.1+.
* DATAREDIS-972 - Incorrect logic in RedisCommand.validateArgumentCount(int).
* DATAREDIS-971 - BitFieldSubCommands.signed() initializes BitFieldType unsigned.
* DATAREDIS-970 - Release 2.2 M4 (Moore).
* DATAREDIS-956 - LettucePoolingClientConfigurationBuilder does not support ReadFrom.


Changes in version 1.8.21.RELEASE (2019-05-10)
----------------------------------------------
* DATAREDIS-972 - Incorrect logic in RedisCommand.validateArgumentCount(int).
* DATAREDIS-958 - Release 1.8.21 (Ingalls SR21).


Changes in version 2.1.7.RELEASE (2019-05-10)
---------------------------------------------
* DATAREDIS-972 - Incorrect logic in RedisCommand.validateArgumentCount(int).
* DATAREDIS-971 - BitFieldSubCommands.signed() initializes BitFieldType unsigned.
* DATAREDIS-960 - Release 2.1.7 (Lovelace SR7).
* DATAREDIS-956 - LettucePoolingClientConfigurationBuilder does not support ReadFrom.


Changes in version 2.2.0.M3 (2019-04-11)
----------------------------------------
* DATAREDIS-953 - Shared Lettuce connection released twice on failed validation.
* DATAREDIS-951 - Upgrade to Lettuce 5.1.6.
* DATAREDIS-950 - ClassCastException on connection validation of shared Lettuce Cluster connections.
* DATAREDIS-949 - RedisClusterConfiguration.maxRedirects is not applied for Lettuce.
* DATAREDIS-947 - Remove redundant reflection access from JedisClientUtils.
* DATAREDIS-945 - Let the CI build use -U for Maven execution.
* DATAREDIS-944 - Move off deprecations in Spring Data Commons.
* DATAREDIS-942 - Release 2.2 M3 (Moore).
* DATAREDIS-925 - Support secondary index for attribute with UUID type.
* DATAREDIS-794 - Improve JedisClusterConnection topology caching.


Changes in version 2.1.6.RELEASE (2019-04-01)
---------------------------------------------
* DATAREDIS-953 - Shared Lettuce connection released twice on failed validation.
* DATAREDIS-951 - Upgrade to Lettuce 5.1.6.
* DATAREDIS-950 - ClassCastException on connection validation of shared Lettuce Cluster connections.
* DATAREDIS-949 - RedisClusterConfiguration.maxRedirects is not applied for Lettuce.
* DATAREDIS-945 - Let the CI build use -U for Maven execution.
* DATAREDIS-941 - Upgrade to Lettuce 5.1.5.RELEASE.
* DATAREDIS-936 - Upgrade to Jedis 2.9.3.
* DATAREDIS-932 - Jedis exception message for MULTI has typo.
* DATAREDIS-931 - Release 2.1.6 (Lovelace SR6).
* DATAREDIS-930 - LettuceConnectionFactory.getPort() considers only StandaloneConfiguration.
* DATAREDIS-925 - Support secondary index for attribute with UUID type.
* DATAREDIS-888 - ConcurrentModificationException in LettuceConverters.


Changes in version 2.0.14.RELEASE (2019-04-01)
----------------------------------------------
* DATAREDIS-945 - Let the CI build use -U for Maven execution.
* DATAREDIS-936 - Upgrade to Jedis 2.9.3.
* DATAREDIS-932 - Jedis exception message for MULTI has typo.
* DATAREDIS-922 - Release 2.0.14 (Kay SR14).
* DATAREDIS-915 - RedisCacheManager documentation contains incorrect example.


Changes in version 1.8.20.RELEASE (2019-04-01)
----------------------------------------------
* DATAREDIS-957 - Release 1.8.20 (Ingalls SR20).


Changes in version 1.8.19.RELEASE (2019-04-01)
----------------------------------------------
* DATAREDIS-939 - LettuceConnectionFactory does not pass value to the RedisClient when Sentinel is used.
* DATAREDIS-932 - Jedis exception message for MULTI has typo.
* DATAREDIS-921 - Release 1.8.19 (Ingalls SR19).


Changes in version 2.2.0.M2 (2019-03-07)
----------------------------------------
* DATAREDIS-941 - Upgrade to Lettuce 5.1.5.RELEASE.
* DATAREDIS-937 - Add Kotlin extensions for Coroutines support.
* DATAREDIS-935 - Cache manager builder can lead to inconsistent state.
* DATAREDIS-932 - Jedis exception message for MULTI has typo.
* DATAREDIS-930 - LettuceConnectionFactory.getPort() considers only StandaloneConfiguration.
* DATAREDIS-929 - Upgrade to Lettuce 5.1.4.
* DATAREDIS-920 - Introduce Concourse CI.
* DATAREDIS-918 - Enable global timeout for Lettuce by default.
* DATAREDIS-917 - Update copyright years to 2019.
* DATAREDIS-915 - RedisCacheManager documentation contains incorrect example.
* DATAREDIS-913 - ReactiveRedisTemplate.delete(Publisher) and ReactiveRedisTemplate.unlink(Publisher) consider only first element.
* DATAREDIS-910 - Release 2.2 M2 (Moore).
* DATAREDIS-909 - Using a collection in the RedisHash is broken.
* DATAREDIS-905 - StreamMessageListenerContainer activation and cancel can cause race condition.
* DATAREDIS-888 - ConcurrentModificationException in LettuceConverters.
* DATAREDIS-865 - Expose GenericJackson2JsonRedisSerializer.registerNullValueSerializer() for ObjectMapper customization.
* DATAREDIS-848 - Use Lettuce's RestoreArgs to restore a key with replace option.
* DATAREDIS-749 - Upgrade to Jedis 3.0.


Changes in version 2.1.5.RELEASE (2019-02-13)
---------------------------------------------
* DATAREDIS-929 - Upgrade to Lettuce 5.1.4.
* DATAREDIS-923 - Release 2.1.5 (Lovelace SR5).
* DATAREDIS-915 - RedisCacheManager documentation contains incorrect example.


Changes in version 2.1.4.RELEASE (2019-01-10)
---------------------------------------------
* DATAREDIS-918 - Enable global timeout for Lettuce by default.
* DATAREDIS-917 - Update copyright years to 2019.
* DATAREDIS-913 - ReactiveRedisTemplate.delete(Publisher) and ReactiveRedisTemplate.unlink(Publisher) consider only first element.
* DATAREDIS-909 - Using a collection in the RedisHash is broken.
* DATAREDIS-903 - Unused configuration keys are in RedisClusterConfiguration Javadoc.
* DATAREDIS-901 - Release 2.1.4 (Lovelace SR4).


Changes in version 2.0.13.RELEASE (2019-01-10)
----------------------------------------------
* DATAREDIS-917 - Update copyright years to 2019.
* DATAREDIS-903 - Unused configuration keys are in RedisClusterConfiguration Javadoc.
* DATAREDIS-900 - Release 2.0.13 (Kay SR13).


Changes in version 1.8.18.RELEASE (2019-01-10)
----------------------------------------------
* DATAREDIS-917 - Update copyright years to 2019.
* DATAREDIS-899 - Release 1.8.18 (Ingalls SR18).


Changes in version 2.2.0.M1 (2018-12-11)
----------------------------------------
* DATAREDIS-907 - Simplify reference documentation setup.
* DATAREDIS-906 - Release 2.2 M1 (Moore).
* DATAREDIS-903 - Unused configuration keys are in RedisClusterConfiguration Javadoc.
* DATAREDIS-897 - Upgrade to Lettuce 5.1.3.
* DATAREDIS-890 - JedisClusterTopologyProvider sends nodes operation always to the same node.
* DATAREDIS-884 - Upgrade to Lettuce 5.1.2.RELEASE.
* DATAREDIS-881 - Add config parameter shutdownQuietPeriod beside of shutdownTimeout for LettuceClientConfiguration.
* DATAREDIS-876 - Upgrade to Commons Pool2 2.6.0.
* DATAREDIS-875 - HashMapper is serializing unnecessary field type information to Redis.
* DATAREDIS-874 - Implement accumulate/update methods on RedisAtomicInteger, RedisAtomicLong, and RedisAtomicDouble.
* DATAREDIS-873 - Accept single collection parameter in SetOperations diff/inter/union methods.
* DATAREDIS-872 - InitialValue is not specified when two threads use the RedisAtomicInteger constructor concurrently, and two threads can cause thread safety issues.
* DATAREDIS-864 - Add support for Redis Streams.
* DATAREDIS-721 - Extend LettuceConnectionProvider to non-blocking connect.


Changes in version 2.1.3.RELEASE (2018-11-27)
---------------------------------------------
* DATAREDIS-897 - Upgrade to Lettuce 5.1.3.
* DATAREDIS-890 - JedisClusterTopologyProvider sends nodes operation always to the same node.
* DATAREDIS-885 - Release 2.1.3 (Lovelace SR3).


Changes in version 2.0.12.RELEASE (2018-11-27)
----------------------------------------------
* DATAREDIS-890 - JedisClusterTopologyProvider sends nodes operation always to the same node.
* DATAREDIS-879 - Release 2.0.12 (Kay SR12).
* DATAREDIS-872 - InitialValue is not specified when two threads use the RedisAtomicInteger constructor concurrently, and two threads can cause thread safety issues.


Changes in version 1.8.17.RELEASE (2018-11-27)
----------------------------------------------
* DATAREDIS-880 - Release 1.8.17 (Ingalls SR17).
* DATAREDIS-872 - InitialValue is not specified when two threads use the RedisAtomicInteger constructor concurrently, and two threads can cause thread safety issues.


Changes in version 2.1.2.RELEASE (2018-10-29)
---------------------------------------------
* DATAREDIS-884 - Upgrade to Lettuce 5.1.2.RELEASE.
* DATAREDIS-878 - Release 2.1.2 (Lovelace SR2).
* DATAREDIS-875 - HashMapper is serializing unnecessary field type information to Redis.
* DATAREDIS-872 - InitialValue is not specified when two threads use the RedisAtomicInteger constructor concurrently, and two threads can cause thread safety issues.


Changes in version 1.8.16.RELEASE (2018-10-15)
----------------------------------------------
* DATAREDIS-866 - Release 1.8.16 (Ingalls SR16).


Changes in version 2.0.11.RELEASE (2018-10-15)
----------------------------------------------
* DATAREDIS-867 - Release 2.0.11 (Kay SR11).


Changes in version 2.1.1.RELEASE (2018-10-15)
---------------------------------------------
* DATAREDIS-871 - Release 2.1.1 (Lovelace SR1).


Changes in version 2.1.0.RELEASE (2018-09-21)
---------------------------------------------
* DATAREDIS-870 - Upgrade to Lettuce 5.1.0.RELEASE.
* DATAREDIS-869 - Track and reflect nomenclature changes re replication.
* DATAREDIS-868 - Include documentation about Repository Object Mapping Fundamentals.
* DATAREDIS-862 - Document that Redis Repositories do not support transactions.
* DATAREDIS-861 - Release 2.1 GA (Lovelace).
* DATAREDIS-741 - Improve repository operation documentation.
* DATAREDIS-708 - Extract BGREWRITEAOF and BGSAVE tests to unit tests.


Changes in version 2.0.10.RELEASE (2018-09-10)
----------------------------------------------
* DATAREDIS-862 - Document that Redis Repositories do not support transactions.
* DATAREDIS-854 - Release 2.0.10 (Kay SR10).
* DATAREDIS-741 - Improve repository operation documentation.


Changes in version 1.8.15.RELEASE (2018-09-10)
----------------------------------------------
* DATAREDIS-862 - Document that Redis Repositories do not support transactions.
* DATAREDIS-856 - Release 1.8.15 (Ingalls SR15).
* DATAREDIS-741 - Improve repository operation documentation.


Changes in version 2.1.0.RC2 (2018-08-20)
-----------------------------------------
* DATAREDIS-853 - Release 2.1 RC2 (Lovelace).


Changes in version 1.8.14.RELEASE (2018-07-27)
----------------------------------------------
* DATAREDIS-844 - Release 1.8.14 (Ingalls SR14).


Changes in version 2.0.9.RELEASE (2018-07-26)
---------------------------------------------
* DATAREDIS-852 - NullPointerException using Lettuce with Range.Bound.unbounded().
* DATAREDIS-850 - Wrong assertion in ReactiveStringCommands.pSetEX(…).
* DATAREDIS-845 - Release 2.0.9 (Kay SR9).
* DATAREDIS-843 - RedisAtomic[*].compareAndSet is not atomic.


Changes in version 2.1.0.RC1 (2018-07-26)
-----------------------------------------
* DATAREDIS-852 - NullPointerException using Lettuce with Range.Bound.unbounded().
* DATAREDIS-850 - Wrong assertion in ReactiveStringCommands.pSetEX(…).
* DATAREDIS-849 - Add support for immutable objects.
* DATAREDIS-843 - RedisAtomic[*].compareAndSet is not atomic.
* DATAREDIS-842 - LettuceConnectionFactory.getSentinelRedisURI does not set database.
* DATAREDIS-840 - Stopped Redis server increases RedisMessageListenerContainer shutdown time.
* DATAREDIS-839 - Get rid of unnecessary stubbings the break the build.
* DATAREDIS-836 - Release 2.1 RC1 (Lovelace).
* DATAREDIS-830 - LettucePoolingConnectionProvider contains unreleased connections while using RedisMessageListenerContainer.
* DATAREDIS-771 - IsTrue and IsFalse Query Method Support for Boolean Attributes.
* DATAREDIS-743 - Add support for reactive keyspace scanning with SCAN commands.
* DATAREDIS-696 - Add support for RESTORE with REPLACE option.


Changes in version 2.0.8.RELEASE (2018-06-13)
---------------------------------------------
* DATAREDIS-842 - LettuceConnectionFactory.getSentinelRedisURI does not set database.
* DATAREDIS-840 - Stopped Redis server increases RedisMessageListenerContainer shutdown time.
* DATAREDIS-832 - Add coverpage for epub documentation output.
* DATAREDIS-830 - LettucePoolingConnectionProvider contains unreleased connections while using RedisMessageListenerContainer.
* DATAREDIS-829 - Release 2.0.8 (Kay SR8).


Changes in version 1.8.13.RELEASE (2018-06-13)
----------------------------------------------
* DATAREDIS-840 - Stopped Redis server increases RedisMessageListenerContainer shutdown time.
* DATAREDIS-832 - Add coverpage for epub documentation output.
* DATAREDIS-828 - Release 1.8.13 (Ingalls SR13).


Changes in version 2.1.0.M3 (2018-05-17)
----------------------------------------
* DATAREDIS-833 - Upgrade to Lettuce 5.1.0.M1.
* DATAREDIS-832 - Add coverpage for epub documentation output.
* DATAREDIS-827 - Upgrade to Lettuce 5.0.4.RELEASE.
* DATAREDIS-825 - Full editing pass on reference documentation.
* DATAREDIS-824 - NPE: DefaultReactiveHashOperations#multiGet on null values.
* DATAREDIS-822 - RedisCommand does not consider optional upper argument count.
* DATAREDIS-819 - Fix typo in ReactiveValueOperations.
* DATAREDIS-817 - Upgrade build profile to Redis 4.0.9.
* DATAREDIS-815 - Add method variants accepting/returning java.time.Duration.
* DATAREDIS-812 - Release 2.1 M3 (Lovelace).
* DATAREDIS-786 - Add ValueOperations.setIfPresent(…).
* DATAREDIS-778 - BoundZSetOperations should match return types of ZSetOperations.
* DATAREDIS-763 - Introduce factory methods for JDK serializer accepting ClassLoader.
* DATAREDIS-716 - Add support for OBJECT command.
* DATAREDIS-697 - Add support for BITPOS.
* DATAREDIS-612 - Provide reactive RedisMessageListenerContainer.
* DATAREDIS-562 - Add support for BITFIELD.


Changes in version 2.0.7.RELEASE (2018-05-08)
---------------------------------------------
* DATAREDIS-827 - Upgrade to Lettuce 5.0.4.RELEASE.
* DATAREDIS-825 - Full editing pass on reference documentation.
* DATAREDIS-824 - NPE: DefaultReactiveHashOperations#multiGet on null values.
* DATAREDIS-822 - RedisCommand does not consider optional upper argument count.
* DATAREDIS-819 - Fix typo in ReactiveValueOperations.
* DATAREDIS-809 - Fix Javadoc.
* DATAREDIS-808 - Fix ambiguous repository names in tests.
* DATAREDIS-806 - Release 2.0.7 (Kay SR7).
* DATAREDIS-803 - Work around Redis parameter limitation.
* DATAREDIS-623 - RedisSystemException with paged queries by 2 indexed fields.
* DATAREDIS-601 - Improve Transaction reference documentation.


Changes in version 1.8.12.RELEASE (2018-05-08)
----------------------------------------------
* DATAREDIS-825 - Full editing pass on reference documentation.
* DATAREDIS-822 - RedisCommand does not consider optional upper argument count.
* DATAREDIS-809 - Fix Javadoc.
* DATAREDIS-805 - Release 1.8.12 (Ingalls SR12).
* DATAREDIS-623 - RedisSystemException with paged queries by 2 indexed fields.
* DATAREDIS-601 - Improve Transaction reference documentation.


Changes in version 2.1.0.M2 (2018-04-13)
----------------------------------------
* DATAREDIS-810 - Adapt to API changes in Spring Data Commons.
* DATAREDIS-809 - Fix Javadoc.
* DATAREDIS-808 - Fix ambiguous repository names in tests.
* DATAREDIS-803 - Work around Redis parameter limitation.
* DATAREDIS-800 - Upgrade to netty 4.1.22.Final.
* DATAREDIS-799 - Upgrade to Lettuce 5.0.3.RELEASE.
* DATAREDIS-798 - Remove explicit declaration of Jackson library versions.
* DATAREDIS-791 - ReactiveHashCommands.hMSet calls HSETNX if map contains a single tuple.
* DATAREDIS-789 - Lua script in redis-scripting.adoc contains syntax error.
* DATAREDIS-787 - Retain stack trace in tests.
* DATAREDIS-785 - Export composable repositories via CDI.
* DATAREDIS-784 - Add support for increment and decrement commands via ReactiveValueOperations.
* DATAREDIS-783 - Fix typo in LettuceReactiveRedisConnection.
* DATAREDIS-782 - Add support for SET key value NX EX ttl.
* DATAREDIS-780 - Up-to-date guidelines for serialization usage.
* DATAREDIS-779 - ReactiveValueOperations.set[ifPresent|ifAbsent](…) does not return a value if value was not set.
* DATAREDIS-775 - ClassCastException when using Redis Cluster with connection pooling.
* DATAREDIS-773 - Upgrade to Lettuce 5.0.2.RELEASE.
* DATAREDIS-770 - Release 2.1 M2 (Lovelace).
* DATAREDIS-768 - Redis repositories deserialize Map<Integer, Integer> to strings.
* DATAREDIS-767 - RedisCacheManager always returns/creates caches which is conflicting with CompositeCacheManager.
* DATAREDIS-764 - Polish serializers section in reference documentation.
* DATAREDIS-762 - Add support for static Master/Slave setups with provided nodes.
* DATAREDIS-746 - Zset union and intersect operation aggregation support.
* DATAREDIS-731 - Share native Lettuce Cluster connection across LettuceClusterConnection.
* DATAREDIS-715 - Cannot configure RedisCache prefix.
* DATAREDIS-635 - Implement Cluster SCAN support for Lettuce.
* DATAREDIS-601 - Improve Transaction reference documentation.
* DATAREDIS-545 - Support connection-pooling for Redis Cluster with Lettuce.
* DATAREDIS-544 - Reading back nested entities fails when no default constructor present.
* DATAREDIS-543 - Spring Data Redis should support the @TypeAlias annotation.


Changes in version 2.0.6.RELEASE (2018-04-04)
---------------------------------------------
* DATAREDIS-799 - Upgrade to Lettuce 5.0.3.RELEASE.
* DATAREDIS-798 - Remove explicit declaration of Jackson library versions.
* DATAREDIS-791 - ReactiveHashCommands.hMSet calls HSETNX if map contains a single tuple.
* DATAREDIS-789 - Lua script in redis-scripting.adoc contains syntax error.
* DATAREDIS-783 - Fix typo in LettuceReactiveRedisConnection.
* DATAREDIS-780 - Up-to-date guidelines for serialization usage.
* DATAREDIS-776 - Release 2.0.6 (Kay SR6).


Changes in version 1.8.11.RELEASE (2018-04-04)
----------------------------------------------
* DATAREDIS-798 - Remove explicit declaration of Jackson library versions.
* DATAREDIS-790 - Backport JedisConnection always executes SELECT via RedisTemplate.
* DATAREDIS-789 - Lua script in redis-scripting.adoc contains syntax error.
* DATAREDIS-780 - Up-to-date guidelines for serialization usage.
* DATAREDIS-768 - Redis repositories deserialize Map<Integer, Integer> to strings.
* DATAREDIS-766 - SSL flag not applied if JedisConnectionFactory configured via JedisShardInfo.
* DATAREDIS-765 - Sentinel with JedisConnectionFactory without pooling connects to localhost:6379.
* DATAREDIS-764 - Polish serializers section in reference documentation.
* DATAREDIS-759 - Fix line endings.
* DATAREDIS-758 - Release 1.8.11 (Ingalls SR11).
* DATAREDIS-673 - RedisCache.get(…) returns false positive cache hit when key is deleted in-flight.


Changes in version 2.0.5.RELEASE (2018-02-28)
---------------------------------------------
* DATAREDIS-775 - ClassCastException when using Redis Cluster with connection pooling.
* DATAREDIS-774 - Release 2.0.5 (Kay SR5).


Changes in version 2.0.4.RELEASE (2018-02-19)
---------------------------------------------
* DATAREDIS-773 - Upgrade to Lettuce 5.0.2.RELEASE.
* DATAREDIS-768 - Redis repositories deserialize Map<Integer, Integer> to strings.
* DATAREDIS-767 - RedisCacheManager always returns/creates caches which is conflicting with CompositeCacheManager.
* DATAREDIS-765 - Sentinel with JedisConnectionFactory without pooling connects to localhost:6379.
* DATAREDIS-764 - Polish serializers section in reference documentation.
* DATAREDIS-760 - Release 2.0.4 (Kay SR4).
* DATAREDIS-715 - Cannot configure RedisCache prefix.


Changes in version 2.1.0.M1 (2018-02-06)
----------------------------------------
* DATAREDIS-765 - Sentinel with JedisConnectionFactory without pooling connects to localhost:6379.
* DATAREDIS-759 - Fix line endings.
* DATAREDIS-756 - MGET with repeating cross-slot keys does not return all results.
* DATAREDIS-755 - LettuceSslClientConfigurationBuilder methods are package-protected.
* DATAREDIS-751 - Update copyright years to 2018.
* DATAREDIS-744 - Secondary indexes not removed if id contains colon.
* DATAREDIS-738 - Align changelog with other modules' format.
* DATAREDIS-735 - Upgrade to Lettuce 5.0.1.
* DATAREDIS-733 - Typo in ValueOperations.increment documentation link.
* DATAREDIS-728 - Unnecessary cache configuration map creation in RedisCacheManagerBuilder.
* DATAREDIS-727 - Incorrect documentation for RedisCacheManagerBuilder.
* DATAREDIS-726 - Repository readme mentions libs-release repository as snapshot/nightly build repo.
* DATAREDIS-720 - Reactive connections using Lettuce do not use shared connection.
* DATAREDIS-719 - Improve connection FutureResult handling for pipeline and tx mode.
* DATAREDIS-714 - JedisConnection always executes SELECT via RedisTemplate.
* DATAREDIS-713 - Provide constant UTF-8 and ASCII StringRedisSerializer instances.
* DATAREDIS-711 - ClassCastException in Lua script result processing returning List.
* DATAREDIS-710 - Release 2.1 M1 (Lovelace).
* DATAREDIS-706 - JedisClusterStringCommands.set(…) contains redundant null checks.
* DATAREDIS-698 - Add support for HSTRLEN.
* DATAREDIS-694 - Add support for TOUCH.
* DATAREDIS-693 - Add support for UNLINK.
* DATAREDIS-682 - Support unix domain socket connections.
* DATAREDIS-643 - Provide a reactive StringRedisTemplate.
* DATAREDIS-619 - Provide documentation for reactive Redis Template API.
* DATAREDIS-605 - Query by Example support.
* DATAREDIS-580 - Support Master/Slave connections using Lettuce.
* DATAREDIS-576 - Set client name on Lettuce connection factory.
* DATAREDIS-529 - Add support for EXISTS taking multiple keys.


Changes in version 2.0.3.RELEASE (2018-01-24)
---------------------------------------------
* DATAREDIS-759 - Fix line endings.
* DATAREDIS-756 - MGET with repeating cross-slot keys does not return all results.
* DATAREDIS-755 - LettuceSslClientConfigurationBuilder methods are package-protected.
* DATAREDIS-744 - Secondary indexes not removed if id contains colon.
* DATAREDIS-738 - Align changelog with other modules' format.
* DATAREDIS-737 - Release 2.0.3 (Kay SR3).
* DATAREDIS-714 - JedisConnection always executes SELECT via RedisTemplate.


Changes in version 1.8.10.RELEASE (2018-01-24)
----------------------------------------------
* DATAREDIS-756 - MGET with repeating cross-slot keys does not return all results.
* DATAREDIS-744 - Secondary indexes not removed if id contains colon.
* DATAREDIS-738 - Align changelog with other modules' format.
* DATAREDIS-736 - Release 1.8.10 (Ingalls SR10).


Changes in version 2.0.2.RELEASE (2017-11-27)
---------------------------------------------
* DATAREDIS-735 - Upgrade to Lettuce 5.0.1.
* DATAREDIS-733 - Typo in ValueOperations.increment documentation link.
* DATAREDIS-728 - Unnecessary cache configuration map creation in RedisCacheManagerBuilder.
* DATAREDIS-727 - Incorrect documentation for RedisCacheManagerBuilder.
* DATAREDIS-723 - Release 2.0.2 (Kay SR2).
* DATAREDIS-706 - JedisClusterStringCommands.set(…) contains redundant null checks.


Changes in version 1.8.9.RELEASE (2017-11-27)
---------------------------------------------
* DATAREDIS-733 - Typo in ValueOperations.increment documentation link.
* DATAREDIS-717 - Release 1.8.9 (Ingalls SR9).


Changes in version 2.0.1.RELEASE (2017-10-27)
---------------------------------------------
* DATAREDIS-720 - Reactive connections using Lettuce do not use shared connection.
* DATAREDIS-719 - Improve connection FutureResult handling for pipeline and tx mode.
* DATAREDIS-711 - ClassCastException in Lua script result processing returning List.
* DATAREDIS-709 - Release 2.0.1 (Kay SR1).
* DATAREDIS-619 - Provide documentation for reactive Redis Template API.


Changes in version 1.8.8.RELEASE (2017-10-11)
---------------------------------------------
* DATAREDIS-689 - Release 1.8.8 (Ingalls SR8).
* DATAREDIS-603 - JedisCluster exception conversion produces NullPointerException on cache put operation.


Changes in version 2.0.0.RELEASE (2017-10-02)
---------------------------------------------
* DATAREDIS-705 - set(byte[] key, byte[] value, Expiration expiration, SetOption option) should have return value.
* DATAREDIS-704 - Upgrade to Lettuce 5.0 GA.
* DATAREDIS-703 - Upgrade to Lettuce 5.0 snapshot.
* DATAREDIS-701 - Add explicit automatic module name for Java 9.
* DATAREDIS-700 - Upgrade to OpenWebBeans 2.0.1.
* DATAREDIS-692 - Introduce nullable annotations for API validation.
* DATAREDIS-691 - Release 2.0 GA (Kay).
* DATAREDIS-603 - JedisCluster exception conversion produces NullPointerException on cache put operation.


Changes in version 2.0.0.RC3 (2017-09-11)
-----------------------------------------
* DATAREDIS-690 - Upgrade to Lettuce 5.0 RC2.
* DATAREDIS-688 - Return delete result via RedisOperations.delete(…).
* DATAREDIS-685 - Upgrade Redis version in Makefile to 4.0.1.
* DATAREDIS-684 - Broken jedis connection returned to jedis pool, cause many strange exceptions.
* DATAREDIS-683 - Provide reactive Lua scripting commands.
* DATAREDIS-681 - Typos in MulitNodeResult and ResultByReferenceKeyPositionComperator.
* DATAREDIS-680 - Sorted Set score method documentations point to zrem documentation.
* DATAREDIS-679 - Cluster command execution fails after adding a Redis cluster node.
* DATAREDIS-676 - LettuceClusterConnection disregards the configuration and has hard-coded timeout of 100ms.
* DATAREDIS-674 - Support zAdd with a Set of Tuples using Jedis Cluster connections.
* DATAREDIS-671 - Release 2.0 RC3 (Kay).
* DATAREDIS-668 - Add count option to RedisSetCommands#sPop.
* DATAREDIS-667 - Align Lettuce connection-pooling with LettuceClientConfiguration.
* DATAREDIS-614 - Refactor GeoOperations and remove geo prefix from method names.
* DATAREDIS-578 - Reduce visibility of default Template API implementation fragments.


Changes in version 1.8.7.RELEASE (2017-09-11)
---------------------------------------------
* DATAREDIS-687 - Assert RedisCache compatibility with Spring5.
* DATAREDIS-686 - Comparator in ClusterCommandExecutor uses Java 8 API.
* DATAREDIS-684 - Broken jedis connection returned to jedis pool, cause many strange exceptions.
* DATAREDIS-680 - Sorted Set score method documentations point to zrem documentation.
* DATAREDIS-679 - Cluster command execution fails after adding a Redis cluster node.
* DATAREDIS-676 - LettuceClusterConnection disregards the configuration and has hard-coded timeout of 100ms.
* DATAREDIS-674 - Support zAdd with a Set of Tuples using Jedis Cluster connections.
* DATAREDIS-672 - Release 1.8.7 (Ingalls SR7).


Changes in version 1.8.6.RELEASE (2017-07-26)
---------------------------------------------
* DATAREDIS-669 - Release 1.8.6 (Ingalls SR6).


Changes in version 2.0.0.RC2 (2017-07-25)
-----------------------------------------
* DATAREDIS-670 - Release 2.0 RC2 (Kay).


Changes in version 2.0.0.RC1 (2017-07-25)
-----------------------------------------
* DATAREDIS-665 - Upgrade to Lettuce 5.0 RC1.
* DATAREDIS-664 - Adapt to ID type changes in KeyValue module.
* DATAREDIS-663 - Inherit Project Reactor version from dependency management.
* DATAREDIS-661 - Change RedisServerCommands.getConfig() result to Properties.
* DATAREDIS-660 - Adapt to API changes in mapping subsystem.
* DATAREDIS-659 - Provide ReactiveServerCommands for basic server interaction.
* DATAREDIS-657 - Fix unit tests after API changes in Spring Data Commons.
* DATAREDIS-656 - LettuceConnectionFactory defaults to 60 second shutdown timeout.
* DATAREDIS-655 - Release 2.0 RC1 (Kay).
* DATAREDIS-625 - Remove copy of TestSubscriber and replace usage with StepVerifyer.
* DATAREDIS-508 - Redis Repositories with Cluster and lettuce breaks application initialization.
* DATAREDIS-481 - Improve RedisCache Manger implementation.


Changes in version 1.8.5.RELEASE (2017-07-24)
---------------------------------------------
* DATAREDIS-657 - Fix unit tests after API changes in Spring Data Commons.
* DATAREDIS-653 - Release 1.8.5 (Ingalls SR5).
* DATAREDIS-647 - SDIFF on cluster connection drops last key.


Changes in version 2.0.0.M4 (2017-06-14)
----------------------------------------
* DATAREDIS-651 - Upgrade to Reactor 3.1 M2.
* DATAREDIS-647 - SDIFF on cluster connection drops last key.
* DATAREDIS-646 - Release 2.0 M4 (Kay).
* DATAREDIS-645 - DefaultReactiveValueOperations.get() emits null if key is absent.
* DATAREDIS-574 - Introduce dedicated RedisClientConfig.


Changes in version 1.8.4.RELEASE (2017-06-08)
---------------------------------------------
* DATAREDIS-637 - ClusterConnections do not close dedicated ClusterCommandExecutor instances.
* DATAREDIS-633 - Adapt to renamed KeyValueQuery.getCriteria() method.
* DATAREDIS-631 - Release 1.8.4 (Ingalls SR4).


Changes in version 1.7.11.RELEASE (2017-06-07)
----------------------------------------------
* DATAREDIS-637 - ClusterConnections do not close dedicated ClusterCommandExecutor instances.
* DATAREDIS-630 - Release 1.7.11 (Hopper SR11).


Changes in version 2.0.0.M3 (2017-05-09)
----------------------------------------
* DATAREDIS-642 - Upgrade to Lettuce 5.0 M2.
* DATAREDIS-640 - Adapt to API changes in repository interfaces.
* DATAREDIS-637 - ClusterConnections do not close dedicated ClusterCommandExecutor instances.
* DATAREDIS-636 - Adapt to Range API changes.
* DATAREDIS-634 - Adapt to moved CustomConversions to Spring Data Commons.
* DATAREDIS-633 - Adapt to renamed KeyValueQuery.getCriteria() method.
* DATAREDIS-629 - Adopt changed Mono and Flux error handling API.
* DATAREDIS-626 - Split up RedisConnection and add defaulting to *.Command interfaces.
* DATAREDIS-624 - Upgrade to Reactor 3.1.0.BUILD-SNAPSHOT.
* DATAREDIS-622 - Release 2.0 M3 (Kay).
* DATAREDIS-613 - Stream results instead of returning collections where possible.


Changes in version 1.7.10.RELEASE (2017-04-19)
----------------------------------------------
* DATAREDIS-628 - Release 1.7.10 (Hopper SR10).


Changes in version 1.8.3.RELEASE (2017-04-19)
---------------------------------------------
* DATAREDIS-627 - Release 1.8.3 (Ingalls SR3).


Changes in version 1.7.9.RELEASE (2017-04-19)
---------------------------------------------
* DATAREDIS-618 - RedisServer.getNumberOtherSentinels() should read num-other-sentinels property.
* DATAREDIS-608 - Release 1.7.9 (Hopper SR9).


Changes in version 1.8.2.RELEASE (2017-04-19)
---------------------------------------------
* DATAREDIS-618 - RedisServer.getNumberOtherSentinels() should read num-other-sentinels property.
* DATAREDIS-607 - Release 1.8.2 (Ingalls SR2).


Changes in version 2.0.0.M2 (2017-04-04)
----------------------------------------
* DATAREDIS-618 - RedisServer.getNumberOtherSentinels() should read num-other-sentinels property.
* DATAREDIS-617 - Drop support for Jackson 1.
* DATAREDIS-606 - RedisCache Tests in Spring Data Redis 2.0.x builds fail testing null values.
* DATAREDIS-602 - Provide reactive Redis Template.
* DATAREDIS-599 - Remove references to single-argument assertion methods of Spring.
* DATAREDIS-595 - Integrate Data Commons Java 8 upgrade branch.
* DATAREDIS-594 - Update "what’s new" section in reference documentation.
* DATAREDIS-593 - Enums with a customized toString method cannot be deserialized from byte[].
* DATAREDIS-592 - RedisCache.get(Object, Callable) does not set the TTL on the element.
* DATAREDIS-591 - Update project documentation with the CLA tool integration.
* DATAREDIS-589 - Publishing RedisKeyExpiredEvent from other than Repository support causes NullPointerException in RedisKeyValueAdapter.
* DATAREDIS-584 - Upgrade to a newer JDK version on TravisCI.
* DATAREDIS-583 - Adapt API in RepositoryFactoryBeanSupport implementation.
* DATAREDIS-579 - Register repository factory in spring.factories for multi-store support.
* DATAREDIS-573 - Release 2.0 M2 (Kay).
* DATAREDIS-564 - Invoking JedisConnection.expire during transaction/pipelining can cause NPE.
* DATAREDIS-563 - Migrate Jira ticket reference format in tests.
* DATAREDIS-559 - Reuse Surefire JVM forks during integration test.
* DATAREDIS-552 - Set client name on Jedis connection factory.
* DATAREDIS-532 - Convert all see http:// links to valid @see links.


Changes in version 1.7.8.RELEASE (2017-03-02)
---------------------------------------------
* DATAREDIS-599 - Remove references to single-argument assertion methods of Spring.
* DATAREDIS-597 - Release 1.7.8 (Hopper SR8).


Changes in version 1.8.1.RELEASE (2017-03-02)
---------------------------------------------
* DATAREDIS-599 - Remove references to single-argument assertion methods of Spring.
* DATAREDIS-598 - Release 1.8.1 (Ingalls SR1).


Changes in version 1.7.7.RELEASE (2017-01-26)
---------------------------------------------
* DATAREDIS-593 - Enums with a customized toString method cannot be deserialized from byte[].
* DATAREDIS-586 - Release 1.7.7 (Hopper SR7).
* DATAREDIS-564 - Invoking JedisConnection.expire during transaction/pipelining can cause NPE.


Changes in version 1.8.0.RELEASE (2017-01-26)
---------------------------------------------
* DATAREDIS-594 - Update "what’s new" section in reference documentation.
* DATAREDIS-593 - Enums with a customized toString method cannot be deserialized from byte[].
* DATAREDIS-592 - RedisCache.get(Object, Callable) does not set the TTL on the element.
* DATAREDIS-591 - Update project documentation with the CLA tool integration.
* DATAREDIS-589 - Publishing RedisKeyExpiredEvent from other than Repository support causes NullPointerException in RedisKeyValueAdapter.
* DATAREDIS-587 - Release 1.8 GA (Ingalls).
* DATAREDIS-564 - Invoking JedisConnection.expire during transaction/pipelining can cause NPE.
* DATAREDIS-563 - Migrate Jira ticket reference format in tests.
* DATAREDIS-532 - Convert all see http:// links to valid @see links.


Changes in version 1.7.6.RELEASE (2016-12-21)
---------------------------------------------
* DATAREDIS-566 - Release 1.7.6 (Hopper SR6).


Changes in version 1.8.0.RC1 (2016-12-21)
-----------------------------------------
* DATAREDIS-584 - Upgrade to a newer JDK version on TravisCI.
* DATAREDIS-583 - Adapt API in RepositoryFactoryBeanSupport implementation.
* DATAREDIS-579 - Register repository factory in spring.factories for multi-store support.
* DATAREDIS-558 - spring-data-redis - Cannot install in OSGi due import range of slf4j is locked down to 1.7.12 version.
* DATAREDIS-553 - Support caching null values via RedisCache.
* DATAREDIS-552 - Set client name on Jedis connection factory.
* DATAREDIS-551 - NPE when counting keys while invoking findBy(Pageable).
* DATAREDIS-548 - Connection should be released when used with read-only transactions.
* DATAREDIS-547 - Getting NPE when writing valid Query Method without any criteria.
* DATAREDIS-542 - RedisCache.putIfAbsent does not set the TTL on the element.
* DATAREDIS-541 - Release 1.8 RC1 (Ingalls).
* DATAREDIS-539 - replace call to deprecated addCache.
* DATAREDIS-533 - Add support for geoindex query methods.
* DATAREDIS-531 - ScanCursor holds reference to closed/released Jedis connection.
* DATAREDIS-528 - Upgrade to Lettuce 4.2.


Changes in version 2.0.0.M1 (2016-11-23)
----------------------------------------
* DATAREDIS-569 - Set up 2.0 development.
* DATAREDIS-568 - Release 2.0 M1 (Kay).
* DATAREDIS-567 - Remove Support for SRP and JRedis.
* DATAREDIS-525 - Add support for reactive RedisConnection and RedisOperations.


Changes in version 1.7.5.RELEASE (2016-11-03)
---------------------------------------------
* DATAREDIS-558 - spring-data-redis - Cannot install in OSGi due import range of slf4j is locked down to 1.7.12 version.
* DATAREDIS-557 - Release 1.7.5 (Hopper SR5).
* DATAREDIS-542 - RedisCache.putIfAbsent does not set the TTL on the element.


Changes in version 1.7.4.RELEASE (2016-09-29)
---------------------------------------------
* DATAREDIS-555 - Release 1.7.4 (Hopper SR4).


Changes in version 1.6.6.RELEASE (2016-09-29)
---------------------------------------------
* DATAREDIS-556 - Release 1.6.6 (Gosling SR6).


Changes in version 1.6.5.RELEASE (2016-09-20)
---------------------------------------------
* DATAREDIS-554 - Release 1.6.5 (Gosling SR5).
* DATAREDIS-548 - Connection should be released when used with read-only transactions.
* DATAREDIS-513 - Pipelining doesn't supports time operation.
* DATAREDIS-500 - executePipelined with RedisCallback uses wrong serializer (RedisTemplate.java).
* DATAREDIS-469 - RedisAtomicLong throws a null pointer if key is removed.


Changes in version 1.7.3.RELEASE (2016-09-20)
---------------------------------------------
* DATAREDIS-551 - NPE when counting keys while invoking findBy(Pageable).
* DATAREDIS-548 - Connection should be released when used with read-only transactions.
* DATAREDIS-547 - Getting NPE when writing valid Query Method without any criteria.
* DATAREDIS-540 - Assert compatibility with Spring 5.
* DATAREDIS-537 - Add support for Redis Cluster and SSL.
* DATAREDIS-524 - NOAUTH Authentication required when connecting to Redis Sentinel with LettuceConnectionFactory.
* DATAREDIS-522 - Release 1.7.3 (Hopper SR3).
* DATAREDIS-505 - Allow configuration of Redis Keyspace events config value.
* DATAREDIS-502 - App fails to start on AWS due to spring-data-redis use of unsupported CONFIG command.
* DATAREDIS-500 - executePipelined with RedisCallback uses wrong serializer (RedisTemplate.java).


Changes in version 1.8.0.M1 (2016-07-27)
----------------------------------------
* DATAREDIS-540 - Assert compatibility with Spring 5.
* DATAREDIS-537 - Add support for Redis Cluster and SSL.
* DATAREDIS-536 - Integrate version badge from spring.io.
* DATAREDIS-530 - PartialUpdate removes existing indexes.
* DATAREDIS-526 - RedisOperations.getExpire returns zero for negative timeout values.
* DATAREDIS-524 - NOAUTH Authentication required when connecting to Redis Sentinel with LettuceConnectionFactory.
* DATAREDIS-523 - Read back actual TTL into TimeToLive property.
* DATAREDIS-516 - spring-data-redis requires spring 4.2.x components.
* DATAREDIS-514 - Unify georadius capitalization.
* DATAREDIS-513 - Pipelining doesn't supports time operation.
* DATAREDIS-512 - Skip repository index update checks on insert.
* DATAREDIS-510 - Current CacheValueAccessor implementation Make null value to empty string.
* DATAREDIS-509 - Handle serializing arrays of primitives.
* DATAREDIS-507 - RedisKeyValueAdapter.destroy calls RedisConnectionFactory.destroy.
* DATAREDIS-506 - Upgrade to Jedis 2.9.0.
* DATAREDIS-505 - Allow configuration of Redis Keyspace events config value.
* DATAREDIS-503 - Add HashMapper implementation based on MappingRedisConverter.
* DATAREDIS-502 - App fails to start on AWS due to spring-data-redis use of unsupported CONFIG command.
* DATAREDIS-501 - RedisTemplate's default serializer assumes that its ClassLoader can load application types.
* DATAREDIS-500 - executePipelined with RedisCallback uses wrong serializer (RedisTemplate.java).
* DATAREDIS-498 - MappingRedisConverter uses List.sort which requires Java 8.
* DATAREDIS-492 - "CollectionLike" properties are force cast into Collection<?> even though they could be arrays.
* DATAREDIS-491 - Prevent KeyspaceEventMessageListener from starting when no repository detected.
* DATAREDIS-489 - Store and retrieve type hints for Object type property values even when those are considered as simple types.
* DATAREDIS-487 - Release 1.8 M1 (Ingalls).
* DATAREDIS-471 - Incremental updates for Redis KeyValue Template.
* DATAREDIS-469 - RedisAtomicLong throws a null pointer if key is removed.
* DATAREDIS-438 - Add support for geo commands.
* DATAREDIS-423 - Add Jackson2 HashMapper implementation.


Changes in version 1.7.2.RELEASE (2016-06-15)
---------------------------------------------
* DATAREDIS-517 - Back port documentation for New in Spring Data Redis 1.7.
* DATAREDIS-516 - spring-data-redis requires spring 4.2.x components.
* DATAREDIS-513 - Pipelining doesn't supports time operation.
* DATAREDIS-512 - Skip repository index update checks on insert.
* DATAREDIS-510 - Current CacheValueAccessor implementation Make null value to empty string.
* DATAREDIS-509 - Handle serializing arrays of primitives.
* DATAREDIS-507 - RedisKeyValueAdapter.destroy calls RedisConnectionFactory.destroy.
* DATAREDIS-501 - RedisTemplate's default serializer assumes that its ClassLoader can load application types.
* DATAREDIS-498 - MappingRedisConverter uses List.sort which requires Java 8.
* DATAREDIS-492 - "CollectionLike" properties are force cast into Collection<?> even though they could be arrays.
* DATAREDIS-491 - Prevent KeyspaceEventMessageListener from starting when no repository detected.
* DATAREDIS-489 - Store and retrieve type hints for Object type property values even when those are considered as simple types.
* DATAREDIS-488 - Release 1.7.2 (Hopper SR2).
* DATAREDIS-469 - RedisAtomicLong throws a null pointer if key is removed.


Changes in version 1.7.1.RELEASE (2016-04-06)
---------------------------------------------
* DATAREDIS-486 - Release 1.7.1 (Hopper SR1).


Changes in version 1.7.0.RELEASE (2016-04-06)
---------------------------------------------
* DATAREDIS-485 - Add pull request template.
* DATAREDIS-484 - Release 1.7 GA (Hopper).
* DATAREDIS-482 - Provide meaningful exception messages in MappingRedisConverter.
* DATAREDIS-480 - Make LettuceConnectionFactory able to set all options of an SSL connection.
* DATAREDIS-444 - DefaultHashOperation does not return value.


Changes in version 1.7.0.RC1 (2016-03-18)
-----------------------------------------
* DATAREDIS-479 - Upgrade to jedis to 2.8.1.
* DATAREDIS-478 - Upgrade to lettuce 3.4.2.Final.
* DATAREDIS-476 - Make LettuceConnectionFactory's client able to connect through SSL.
* DATAREDIS-475 - Release 1.7 RC1 (Hopper).
* DATAREDIS-474 - Fix spelling / format in reference documentation.
* DATAREDIS-472 - Update/Add guards in JedisConnetion that (no longer) require casts from long to int when exceeding Integer.MAX_VALUE.
* DATAREDIS-468 - RedisCache does not work in cluster.
* DATAREDIS-467 - Cluster mget not working.
* DATAREDIS-465 - Guard lettuce shutdown during ConnectionFactory.destroy().
* DATAREDIS-464 - Enhance JavaDoc on RedisStringCommands and StringRedisConnection.
* DATAREDIS-463 - Improve test synchronization.
* DATAREDIS-462 - Support lettuce ClientResources.
* DATAREDIS-440 - @TimeToLive does not work on Method.
* DATAREDIS-427 - Allow injecting deserializer for JdkSerializationRedisSerializer.
* DATAREDIS-425 - Add Support for basic CRUD and finder Operations backed by Hashes and Sets.
* DATAREDIS-415 - Listener Container Does Not Set Interrupted Bit.
* DATAREDIS-316 - Add EX, PX, NX, XX options to SET command.


Changes in version 1.6.4.RELEASE (2016-02-23)
---------------------------------------------
* DATAREDIS-465 - Guard lettuce shutdown during ConnectionFactory.destroy().
* DATAREDIS-463 - Improve test synchronization.
* DATAREDIS-460 - Remove eclipse specific files from github repository.
* DATAREDIS-459 - Release 1.6.4 (Gosling SR2).
* DATAREDIS-443 - Support of synchronized mode introduced in Spring 4.3.
* DATAREDIS-419 - Switch to Maven build.


Changes in version 1.7.0.M1 (2016-02-12)
----------------------------------------
* DATAREDIS-461 - Deprecate support for org.codehaus.jackson based Serializers and Mappers.
* DATAREDIS-460 - Remove eclipse specific files from github repository.
* DATAREDIS-458 - Upgrade to lettuce 3.4.1.Final.
* DATAREDIS-457 - Fix typo in reference documentation.
* DATAREDIS-456 - Fix misleading log message created by RedisMessageListenerContainer.
* DATAREDIS-455 - Increase timeout for expiration in cluster tests.
* DATAREDIS-452 - Improve thread synchronization in RedisCacheTest.testCacheGetSynchronized.
* DATAREDIS-449 - Add code of conduct.
* DATAREDIS-448 - DefaultSetOperations.intersectAndStore don't return operation result.
* DATAREDIS-447 - Release 1.7 M1 (Hopper).
* DATAREDIS-443 - Support of synchronized mode introduced in Spring 4.3.
* DATAREDIS-437 - Upgrade to Jedis 2.8.0.
* DATAREDIS-435 - PubSubResubscribeTests and PubSubTests rely on other tests having already run previously.
* DATAREDIS-431 - SELECT not called with @Caching annotations and Lettuce library.
* DATAREDIS-419 - Switch to Maven build.
* DATAREDIS-417 - ScanCursor throw " java.util.NoSuchElementException".
* DATAREDIS-407 - Add zRangeByLex to ZSetOperations.
* DATAREDIS-405 - Deprecate support for jredis and srp.
* DATAREDIS-315 - Add Support for Redis Cluster.
* DATAREDIS-276 - Add support form MIGRATE.


Changes in version 1.6.2.RELEASE (2015-12-18)
---------------------------------------------
* DATAREDIS-442 - Upgrade to Spring 4.1.9.
* DATAREDIS-441 - Release 1.6.2 (Gosling).


Changes in version 1.6.1.RELEASE (2015-11-15)
---------------------------------------------
* DATAREDIS-436 - Release 1.6.1 (Gosling).
* DATAREDIS-435 - PubSubResubscribeTests and PubSubTests rely on other tests having already run previously.
* DATAREDIS-417 - ScanCursor throw " java.util.NoSuchElementException".


Changes in version 1.4.4.RELEASE (2015-10-14)
---------------------------------------------
* DATAREDIS-434 - Release 1.4.4 (Evans).


Changes in version 1.6.0.RELEASE (2015-09-01)
---------------------------------------------
* DATAREDIS-429 - Release 1.6 GA (Gosling).
* DATAREDIS-426 - Upgrade to lettuce 3.3.
* DATAREDIS-424 - Update Reference Documentation.
* DATAREDIS-421 - NullPointerException when saving null values.
* DATAREDIS-392 - Jackson2RedisSerializer cannot deserialize ObjectId fields.


Changes in version 1.6.0.RC1 (2015-08-04)
-----------------------------------------
* DATAREDIS-420 - Release 1.6 RC1 (Gosling).
* DATAREDIS-416 - RedisCache.putIfAbsent(…) breaks contract defined by org.springframework.cache.Cache.
* DATAREDIS-414 - Serialization occurs while pooled connection can be released.
* DATAREDIS-413 - Use the latest version of the Spring IO Plugin.
* DATAREDIS-412 - Support for Jedis 2.7.1, 2.7.2 and 2.7.3.
* DATAREDIS-403 - Fix JavaDoc stylesheet.
* DATAREDIS-402 - RedisCache should not expire known keys in case ttl of element is not set.
* DATAREDIS-401 - RedisCacheManager should operate upon RedisOperations instead of RedisTemplate.
* DATAREDIS-348 - Upgrade Lettuce to 3.x release.


Changes in version 1.5.2.RELEASE (2015-07-28)
---------------------------------------------
* DATAREDIS-418 - Release 1.5.2 (Fowler).
* DATAREDIS-416 - RedisCache#putIfAbesent breaks contract defined by o.s.cache.Cache.
* DATAREDIS-412 - Support for Jedis 2.7.1, 2.7.2 and 2.7.3.


Changes in version 1.3.6.RELEASE (2015-07-01)
---------------------------------------------
* DATAREDIS-408 - Release 1.3.6 (Dijkstra).
* DATAREDIS-328 - RedisCacheManager should not instantiate caches in setCacheNames().


Changes in version 1.4.3.RELEASE (2015-07-01)
---------------------------------------------
* DATAREDIS-409 - Release 1.4.3 (Evans).
* DATAREDIS-403 - Fix JavaDoc stylesheet.
* DATAREDIS-383 - Improve JavaDoc of RedisCacheManager.
* DATAREDIS-375 - A transactional RedisCacheManager decorates the cache with the TransactionAwareCacheDecorator twice.
* DATAREDIS-369 - RedisCache zset leak.
* DATAREDIS-332 - @Transactional Using multiple connections.
* DATAREDIS-328 - RedisCacheManager should not instantiate caches in setCacheNames().


Changes in version 1.5.1.RELEASE (2015-06-30)
---------------------------------------------
* DATAREDIS-410 - Release 1.5.1 (Fowler).
* DATAREDIS-403 - Fix JavaDoc stylesheet.
* DATAREDIS-402 - RedisCache should not expire known keys in case ttl of element is not set.
* DATAREDIS-332 - @Transactional Using multiple connections.


Changes in version 1.6.0.M1 (2015-06-02)
----------------------------------------
* DATAREDIS-400 - Release 1.6 M1 (Gosling).
* DATAREDIS-396 - Update Jedis driver to version 2.7.2.
* DATAREDIS-393 - Update Spring Version to 4.1.6.
* DATAREDIS-388 - Upgrade to Jedis 2.7.
* DATAREDIS-378 - Add support for  ZRANGEBYLEX.
* DATAREDIS-352 - Enhance range options for zSetOperations.
* DATAREDIS-332 - @Transactional Using multiple connections.


Changes in version 1.5.0.RELEASE (2015-03-23)
---------------------------------------------
* DATAREDIS-385 - Release 1.5 GA.
* DATAREDIS-384 - Remove Java6 build for Travis-CI.
* DATAREDIS-383 - Improve JavaDoc of RedisCacheManager.
* DATAREDIS-380 - Use Redis 2.8.19 for tests.
* DATAREDIS-379 - Update reference documentation.
* DATAREDIS-374 - Adapt JedisConnectionFactory for changes in Jedis 2.7.


Changes in version 1.5.0.RC1 (2015-03-05)
-----------------------------------------
* DATAREDIS-377 - Release 1.5 RC1.
* DATAREDIS-375 - A transactional RedisCacheManager decorates the cache with the TransactionAwareCacheDecorator twice.
* DATAREDIS-372 - Allow easier RedisSentinelConfig.
* DATAREDIS-371 - Upgrade Spring to 4.0.9.RELEASE.
* DATAREDIS-369 - RedisCache zset leak.
* DATAREDIS-364 - Add extension possibility to RedisCacheManager.
* DATAREDIS-363 - Upgrade to jedis to 2.6.2.
* DATAREDIS-361 - Fix gradle docsZip not picking up reference html.
* DATAREDIS-328 - RedisCacheManager should not instantiate caches in setCacheNames().


Changes in version 1.4.2.RELEASE (2015-01-28)
---------------------------------------------
* DATAREDIS-366 - Release 1.4.2.
* DATAREDIS-364 - Add extension possibility to RedisCacheManager.
* DATAREDIS-361 - Fix gradle docsZip not picking up reference html.
* DATAREDIS-356 - Scripts don't try EVAL after EVALSHA fails.
* DATAREDIS-354 - Jackson2JsonRedisSerializer should allow to customise the JavaType for deserialization via getJavaType().


Changes in version 1.3.5.RELEASE (2015-01-27)
---------------------------------------------
* DATAREDIS-365 - Release 1.3.5.


Changes in version 1.5.0.M1 (2014-12-01)
----------------------------------------
* DATAREDIS-360 - Release 1.5 M1.
* DATAREDIS-359 - Fix redis javadoc generation.
* DATAREDIS-356 - Scripts don't try EVAL after EVALSHA fails.
* DATAREDIS-355 - Upgrade to jedis 2.6.1.
* DATAREDIS-354 - Jackson2JsonRedisSerializer should allow to customise the JavaType for deserialization via getJavaType().
* DATAREDIS-351 - Update build to latest redis version.
* DATAREDIS-350 - Upgrade to Jedis 2.6.x.
* DATAREDIS-347 - DefaultScriptExecutor always runs script twice if Exception is thrown.
* DATAREDIS-334 - Provide binary alternative for RedisScriptingCommands.evalSha.
* DATAREDIS-308 - Add Support for HyperLogLog.
* DATAREDIS-288 - ListOperations should support using Collections instead of varargs as input.
* DATAREDIS-197 - Implement Redis bitmap.
* DATAREDIS-106 - Support for open interval for scores for sorted sets.


Changes in version 1.4.1.RELEASE (2014-10-30)
---------------------------------------------
* DATAREDIS-353 - Release 1.4.1.
* DATAREDIS-347 - DefaultScriptExecutor always runs script twice if Exception is thrown.


Changes in version 1.4.0.RELEASE (2014-09-05)
---------------------------------------------
* DATAREDIS-346 - Update to Spring Version 4.0.7.
* DATAREDIS-345 - Release 1.4 GA.
* DATAREDIS-344 - Assert RedisCache works with spring 4.1.
* DATAREDIS-340 - Bulk adding multiple elements to a sorted set is dramatically slow.
* DATAREDIS-336 - Move to Asciidoctor for reference documentation.


Changes in version 1.3.4.RELEASE (2014-08-27)
---------------------------------------------
* DATAREDIS-339 - Release 1.3.4.
* DATAREDIS-337 - MessageListener method should only be invoked once per message.
* DATAREDIS-333 - EvalSha returns incorrect result.


Changes in version 1.4.0.RC1 (2014-08-13)
-----------------------------------------
* DATAREDIS-338 - Release 1.4 RC1.
* DATAREDIS-337 - MessageListener method should only be invoked once per message.
* DATAREDIS-335 - Upgrade to jedis 2.5.2.
* DATAREDIS-333 - EvalSha returns incorrect result.
* DATAREDIS-330 - Add support for redis Sentinel commands.
* DATAREDIS-327 - Improve exception handling for supported clients.
* DATAREDIS-326 - SrpConverters wraps unknown exceptions in RedisSystemException instead of returning null.
* DATAREDIS-325 - RedisConnectionFactory translates exceptions too aggressively.
* DATAREDIS-324 - Add support to configure RedisSentinels for obtaining connection to current master node.
* DATAREDIS-295 - Converting all exceptions to Jedis Exception.


Changes in version 1.3.2.RELEASE (2014-07-28)
---------------------------------------------
* DATAREDIS-331 - Release 1.3.2.
* DATAREDIS-327 - Improve exception handling for supported clients.
* DATAREDIS-326 - SrpConverters wraps unknown exceptions in RedisSystemException instead of returning null.
* DATAREDIS-325 - RedisConnectionFactory translates exceptions too aggressively.
* DATAREDIS-323 - Remove links to forum.spring.io.
* DATAREDIS-295 - Converting all exceptions to Jedis Exception.


Changes in version 1.4.0.M1 (2014-07-10)
----------------------------------------
* DATAREDIS-323 - Remove links to forum.spring.io.
* DATAREDIS-322 - Release 1.4 M1.
* DATAREDIS-321 - Adapt to Spring 4 upgrade.
* DATAREDIS-314 - Add usage of SCAN commands to Collection types.
* DATAREDIS-313 - Overhaul naming and return types of SCAN, HSCAN, SSCAN, ZSCAN operations.
* DATAREDIS-312 - Add travis-ci configuration.
* DATAREDIS-311 - Add test summary output to the build.
* DATAREDIS-310 - Lock of RedisCache is not safe.
* DATAREDIS-309 - Refactor test profiles to support more than 2 versions.
* DATAREDIS-306 - Add support for ZSCAN.
* DATAREDIS-305 - Add support for HSCAN.
* DATAREDIS-296 - Upgrade jedis to recent version.
* DATAREDIS-290 - Add support for 'SCAN' command.


Changes in version 1.3.1.RELEASE (2014-06-30)
---------------------------------------------
* DATAREDIS-320 - Release 1.3.1.
* DATAREDIS-317 - Cannot increment RedisAtomicInteger.
* DATAREDIS-310 - Lock of RedisCache is not safe.
* DATAREDIS-307 - Add missing reference documentation for managed transaction support.


Changes in version 1.3.0.RELEASE (2014-05-20)
---------------------------------------------
* DATAREDIS-303 - Upgrade to Spring 3.2.9.
* DATAREDIS-302 - DecoratingStringHashMapper breaks RetwisJ sample.
* DATAREDIS-301 - Release 1.3 GA.
* DATAREDIS-300 - RedisConnectionUtils: inconsistency with connection open() and close().
* DATAREDIS-299 - Assert compatibility with Spring IO.


Changes in version 1.3.0.RC1 (2014-05-02)
-----------------------------------------
* DATAREDIS-298 - Unneeded jcl-over-slf4j dependency.
* DATAREDIS-297 - Release 1.3 RC1.
* DATAREDIS-296 - Upgrade jedis to recent version.
* DATAREDIS-293 - JedisConnection does not allow bulk adding multiple elements with the same score to a sorted set.
* DATAREDIS-226 - Individual syntax errors on Lettuce transactions are not reported.
* DATAREDIS-73 - add TransactionAware* Driver interfaces.

Changes in version 1.3.0.M1 (2014-03-31)
----------------------------------------
Fix
  [DATAREDIS-283] - RedisCacheManager.loadCaches overrides already defined cache names in afterPropertiesSet().
  [DATAREDIS-285] - LettuceTemplate.execute should read and convert entire response.
  [DATAREDIS-286] - Avoid potential RedisTemplate.expire() overflow.
  [DATAREDIS-289] - Avoid NPE in append() in case of pipelining or/and multi/exec calls.
Improvement
  [DATAREDIS-184] - Support Redis 2.6 SAVE/NOSAVE arguments to shutdown command.
  [DATAREDIS-284] - Add support for zCard to ZSetOperations.
  [DATAREDIS-287] - setBit() should return a Boolean.
New Feature
  [DATAREDIS-267] - Add support for CLIENT KILL.
  [DATAREDIS-268] - Add support for CLIENT LIST.
  [DATAREDIS-269] - Add support for CLIENT SETNAME.
  [DATAREDIS-270] - Add support for CLIENT GETNAME.
  [DATAREDIS-271] - Add support for PSETEX.
  [DATAREDIS-277] - Add support for SLAVEOF.
Task
  [DATAREDIS-261] - Upgrade commons-pool to commons-pool2.
  [DATAREDIS-275] - Rename RedisServerCommands.bgWriteAof to bgReWriteAof.
  [DATAREDIS-292] - Release 1.3.0 M1.

Changes in version 1.2.1.GA (2014-03-27)
----------------------------------------
Fix
  [DATAREDIS-283] - RedisCacheManager.loadCaches overrides already defined cache names in afterPropertiesSet().
  [DATAREDIS-285] - LettuceConnection.execute should fully read response.
  [DATAREDIS-286] - Avoid overflow in JedisConnection#expire / #pexpire.
  [DATAREDIS-289] - Avoid NPE in DefaultValueOperations#append() in case of pipelining or/and multi/exec calls.
Task
  [DATAREDIS-291] - Release Version 1.2.1.

Changes in version 1.3.0.M1 (2014-03-31)
----------------------------------------
Fix
  [DATAREDIS-283] - RedisCacheManager.loadCaches overrides already defined cache names in afterPropertiesSet().
  [DATAREDIS-285] - LettuceTemplate.execute should read and convert entire response.
  [DATAREDIS-286] - Avoid potential RedisTemplate.expire() overflow.
  [DATAREDIS-289] - Avoid NPE in append() in case of pipelining or/and multi/exec calls.
Improvement
  [DATAREDIS-184] - Support Redis 2.6 SAVE/NOSAVE arguments to shutdown command.
  [DATAREDIS-284] - Add support for zCard to ZSetOperations.
  [DATAREDIS-287] - setBit() should return a Boolean.
New Feature
  [DATAREDIS-267] - Add support for CLIENT KILL.
  [DATAREDIS-268] - Add support for CLIENT LIST.
  [DATAREDIS-269] - Add support for CLIENT SETNAME.
  [DATAREDIS-270] - Add support for CLIENT GETNAME.
  [DATAREDIS-271] - Add support for PSETEX.
  [DATAREDIS-277] - Add support for SLAVEOF.
Task
  [DATAREDIS-261] - Upgrade commons-pool to commons-pool2.
  [DATAREDIS-275] - Rename RedisServerCommands.bgWriteAof to bgReWriteAof.
  [DATAREDIS-292] - Release 1.3.0 M1.

Changes in version 1.2.1.GA (2014-03-27)
----------------------------------------
Fix
  [DATAREDIS-283] - RedisCacheManager.loadCaches overrides already defined cache names in afterPropertiesSet().
  [DATAREDIS-285] - LettuceConnection.execute should fully read response.
  [DATAREDIS-286] - Avoid overflow in JedisConnection#expire / #pexpire.
  [DATAREDIS-289] - Avoid NPE in DefaultValueOperations#append() in case of pipelining or/and multi/exec calls.
Task
  [DATAREDIS-291] - Release Version 1.2.1.

Changes in version 1.2.0.GA (2014-03-03)
----------------------------------------
Task
  [DATAREDIS-279] - Update reference documentation.
  [DATAREDIS-282] - PubSubResubscribeTests should use jedis without pool.


Changes in version 1.2.0.RC1 (2014-02-19)
----------------------------------------
Fix
  [DATAREDIS-166] - Intermittent corrupted input/output streams subscribing to both patterns and channels in RMLC
  [DATAREDIS-170] - Canceling RMLC SubscriptionTask immediately after start can leave connection open
  [DATAREDIS-188] - Infinite loop renaming a non-existent Collection when using Lettuce
  [DATAREDIS-246] - RedisCacheManager‘s getCache method does not match the logical of CompositeCacheManager

Improvement
  [DATAREDIS-250] - Upgrade to Spring Framework 3.2.8.

New Feature
  [DATAREDIS-206] - Add support for time operation
  [DATAREDIS-241] - Add a Jackson2 based RedisSerializer

Task
  [DATAREDIS-254] - Clean up codebase to match spring data conventions
  [DATAREDIS-260] - Upgrade to latest jedis (2.4.1) release
  [DATAREDIS-264] - Update gradle version
  [DATAREDIS-265] - Update Java source and target compatibility to Java 6
  [DATAREDIS-266] - Overhaul documentation.


Changes in version 1.1.1.RELEASE (2014-01-28)
----------------------------------------

Fix
  [DATAREDIS-245] - Prevent excessive Thread creation in unit tests
  [DATAREDIS-248] - Fix generics in DecoratingStringHashMapper to be Java 8 compatible
  [DATAREDIS-257] - Shutdown the client when DefaultLettucePool is destroyed

Improvement
  [DATAREDIS-242] - Listener Container start() Returns Before Container is Really Started
  [DATAREDIS-249] - Improve logging for tests in Gradle build
  [DATAREDIS-251] - Fix tests to work against Redis 2.8.x

Task
  [DATAREDIS-243] - Ensure compatibility with Spring Framework 4.0
  [DATAREDIS-247] - Testcases must be locale independent
  [DATAREDIS-255] - Release 1.1.1


Changes in version 1.1.0.RELEASE (2013-09-09)
----------------------------------------

No changes


Changes in version 1.1.0.RC1 (2013-08-22)
----------------------------------------

Package o.s.d.redis.core
* Modified RedisTemplate expire and expireAt
to use millisecond precision when available (Redis 2.6+)
* Added RedisTemplate getExpire(key, TimeUnit) method that uses
millisecond precision when available (Redis 2.6+)

Package o.s.d.redis.connection.jedis
* Fixed invalid Jedis connections returning to pool after NPE

Package o.s.d.redis.connection.lettuce
* Modified LettuceConnectionFactory to lazily instantiate connections,
allowing the AppContext to start if Redis is unavailable

Package o.s.d.redis.connection.srp
* Added password to SrpConnectionFactory
* Fixed SrpConnection throwing native Exception from constructor on
connection failure

Package o.s.d.redis.listener
* Fixed MessageListenerAdapter extractMessage returning the whole Message
instead of the Message body when serializer is null
* Added resubscribe on connection failure to RedisMessageListenerContainer

Package o.s.d.redis.support.collections
* Implemented ConcurrentMap replace and remove methods


Changes in version 1.1.0.M2 (2013-08-06)
----------------------------------------

General
* Modified RedisConnection and Operations classes to allow passing multiple
elements to hdel, rpush, lpush, sadd, srem, zadd, and zrem operations
* Added method to RedisTemplate for executing Redis Lua scripts
* Modified RedisTemplate and opsForX classes to allow null serializers for
working with raw data
* Modified RedisConnection impls to convert the connector-specific results of closePipeline
to the same data types as the individual RedisConnection operations
* Modified RedisConnection impls to convert the connector-specific results of transaction exec
to the same data types as the individual RedisConnection operations
* Upgraded to Gradle 1.6

Package o.s.d.redis.cache
* Fixed IlegalMonitorStateException when get or put performed while clearing

Package o.s.d.redis.core
* Added RedisTemplate executePipelined methods for executing commands in a pipeline and
returning deserialized results
* Modified RedisTemplate exec to deserialize results of transaction execution
* Fixed StringRedisConnection not being passed to RedisCallbacks executed through StringRedisTemplate
* Fixed NPE in DefaultZSetOperations methods that return Tuple Set in tx or pipeline

Package o.s.d.redis.connection
* Added missing zRevRangeByScore methods to StringRedisConnection
* Modified StringRedisConnection sUnionStore, sInterStore, and sDiffStore to return Long
* Fixed DefaultStringRedisConnection not passing begin and end to bitCount method

Package o.s.d.redis.connection.jedis
* Fixed ClassCastExceptions closing a pipeline after transaction exec
* Fixed UnsupportedOperationExceptions being wrapped in DataAccessExceptions
* Fixed connections not returning to pool on failed select
* Fixed NPEs on exec/closePipeline that includes move

Package o.s.d.redis.connection.lettuce
* Fixed UnsupportedOperationExceptions being wrapped in DataAccessExceptions
* Fixed NPE calling sort with null SortParams
* Fixed closePipeline returning individual results of ops in a transaction instead of
a List of exec results
* Fixed setBit and setRange executing twice when pipelined
* Modified watch method to throw an UnsupportedOperationException if called in a transaction
* Fixed eval and evalsha suppressing Exceptions with ReturnType Multi

Package o.s.d.redis.connection.srp
* Fixed UnsupportedOperationExceptions being wrapped in DataAccessExceptions
* Fixed NPE calling sort with null SortParams
* Fixed closePipeline returning individual results of ops in a transaction instead of
a List of exec results
* Fixed Exception calling select in a transaction
* Fixed NPE in sort when SortParameters.isAlphabetic() returns null

Package o.s.d.redis.listener
* Removed 5 second wait starting RedisMesssageListenerContainer with no listeners

Package o.s.d.redis.support.atomic
* Added RedisAtomicDouble


Changes in version 1.0.6.RELEASE (2013-08-06)
----------------------------------------

General
* Upgraded to Gradle 1.6

Package o.s.d.redis.cache
* Fixed IlegalMonitorStateException when get or put performed while clearing

Package o.s.d.redis.core
* Fixed StringRedisConnection not being passed to RedisCallbacks executed through StringRedisTemplate
* Fixed NPE in DefaultZSetOperations methods that return Tuple Set in tx or pipeline

Package o.s.d.redis.connection.jedis
* Fixed connections not returning to pool on failed select
* Fixed NPEs on exec/closePipeline that includes move

Package o.s.d.redis.connection.lettuce
* Fixed NPE calling sort with null SortParams
* Fixed setBit and setRange executing twice when pipelined

Package o.s.d.redis.connection.srp
* Fixed NPE calling sort with null SortParams
* Fixed Exception calling select in a transaction
* Fixed NPE in sort when SortParameters.isAlphabetic() returns null

Package o.s.d.redis.listener
* Removed 5 second wait starting RedisMesssageListenerContainer with no listeners

Changes in version 1.1.0.M1 (2013-07-02)
----------------------------------------

General
* Added Redis 2.6 millisecond expiration commands (pexpire, pttl, etc)
* Added Redis 2.6 bit commands (bitop, bitcount)
* Added support for Redis 2.6 scripting
* Added Redis 2.6 incrbyfloat and hincrbyfloat commands
* Added Redis 2.6 dump and restore commands
* Added Redis 2.6 info by section
* Added Redis 2.6 srandmember with count
* Removed RJC due to lack of Redis 2.6 support
* Upgraded JRedis from older fork (https://github.com/anthonylauzon/jredis) to
latest original master (https://github.com/alphazero/jredis)
* Made Jedis dependency optional in the build

Package o.s.d.redis.core
* Changed ValueOperations.multiSetIfAbsent return type from void to Boolean

Package o.s.d.redis.connection
* Changed StringRedisCommands.mSetNX return type from void to Boolean

Package o.s.d.redis.connection.jredis
* Removed base64 key encoding, since binary keys are supported in JRedis upgrade.
Fixes issue where keys method with patterns was not working due to encoding.
* Added JredisPool, since pool impl was removed from JRedis. Also fixes
issue with previous pool where failed connections were not removed.

Package o.s.d.redis.connection.lettuce
* Added LettucePool for optional pooling of blocking/tx Lettuce connections
* Added optional Redis password to LettuceConnectionFactory
* Modified LettuceConnectionFactory to throw RedisConnectionFailureExceptions instead
of native Exceptions


Changes in version 1.0.5.RELEASE (2013-07-02)
---------------------------------------------

General
* Upgraded to SRP 0.7
* Upgraded to Lettuce 2.3.3

Package o.s.d.redis.core
* Fixed left/right pop timeouts converting to 0 seconds (blocking indefinitely)

Package o.s.d.redis.connection.lettuce
* Fixed exec returning empty list instead of null if watched variable modified

Package o.s.d.redis.connection.srp
* Fixed exec throwing TransactionFailedException instead of returning null if watched
variable modified

Package o.s.d.redis.listener.adapter
* Added MessageListenerAdapter constructor with delegate and listener method


Changes in version 1.0.4.RELEASE (2013-04-18)
---------------------------------------------

General
* Introduced Lettuce connection sharing to greatly reduce number of connections used
* Upgraded to SRP 0.5
* Improved reference documentation
* Added several integration tests of each RedisConnection implementation

Package o.s.d.redis.core
* Reverted binary backwards incompatibility introduced by fix in 1.0.3.RELEASE to RedisTemplate
convertAndSend() method to return the number of targeted channels

Package o.s.d.redis.connection
* Fixed NPE in DefaultStringRedisConnection deserializing a null Map

Package o.s.d.redis.connection.jedis
* Removed unnecessary cast of Long to Int in increment/decrement ops
* Fixed incorrect transaction discard
* Fixed dbSize/flush ops executing synchronously while pipelining
* Fixed execute method returning incorrect results
* Fixed brPop executing twice when called in a transaction
* Fixed persist method not executing as part of a transaction
* Fixed incorrect closing of pipeline

Package o.s.d.redis.connection.jredis
* Fixed sort not storing results under given key

Package o.s.d.redis.connection.lettuce
* Fixed NPE on LettuceConnection blpop/brpop timeout
* Fixed exec returning a non-null value while pipelining
* Fixed zCount/zInterStore methods executing synchronously when pipelining
* Fixed NPEs or incorrect results in several ops within a transaction
* Fixed zRevRangeByScore methods failing due to incorrect parameter ordering

Package o.s.d.redis.connection.rjc
* Fixed zRevRangeWithScores returning incorrect results
* Fixed incorrect closing of pipeline
* Fixed zRevRangeByScore methods failing due to incorrect parameter ordering

Package o.s.d.redis.connection.srp
* Fixed exec not returning the results of the commands executed in the tx
* Fixed brpop/blpop fails with "ERR wrong number of arguments"
* Fixed sort not working due to NPE/syntax errors
* Fixed zCount/zInterStore methods executing synchronously when pipelining
* Fixed syntax error in zRangeByScore/zRevRangeByScore methods when using offset and count
* Fixed incorrect closing of pipeline
* Fixed zRevRangeByScore methods failing due to incorrect parameter ordering

Package o.s.d.redis.listener
* Fixed SubscriptionTask not closing connections
* Fixed messages not received after adding a message listener to both channel and pattern
before container start


Changes in version 1.0.3.RELEASE (2013-02-13)
---------------------------------------------

General
* Introduced support for Lettuce Redis driver
* Upgraded to Spring Framework 3.1.4
* Log4J dependency removed
* Improved reference documentation

Package o.s.d.redis.cache
* Clarified default of 'useprefix' for RedisCacheManager

Package o.s.d.redis.core
* Improved RedisTemplate initialization to prevent exceptions caused by invalid serializers
* Refined RedisTemplate#delete call when dealign with empty collection
* Refined convertAndSend() method to return the number of targeted channels

Package o.s.d.redis.connection
* Fixed unimplemented method (hGetAll) in StringRedisConnection

Package o.s.d.redis.connection.jedis
* Improved handling of socket exceptions uncaught by the driver at connection time

Package o.s.d.redis.connection.srp
* Fixed incorrect handling BulkReply affecting hash operations
* Improved pipelined usage of various operations

Package o.s.d.redis.listener
* Added proper hash/equals/toString method to ChannelTopic and PatternTopic
* Improved MessageListenerContainer to support dynamic removal of listeners

Package o.s.d.redis.support
* Added RedisTemplate-based constructor to AtomicInteger/Long for connection/resource reuse


Changes in version 1.0.2.RELEASE (2012-10-10)
---------------------------------------------

General
* Upgraded to Spring Framework 3.1.2
* Upgraded to SLF4J 1.6.6
* Upgraded to Log4J 1.2.17
* Upgraded to Jackson 1.8.8
* Upgraded build system to Gradle 1.2

Package o.s.d.redis.cache
* Fixed bug causing constructor to ignore cache name prefix
* Introduced expiration time for cache zones

Package o.s.d.redis.core
* Fixed incorrect return value (from primitive to Object) on BoundHashOperations#hasKey
* Added overloaded ZSet methods with offset/count parameters

Package o.s.d.redis.connection
* Refined RedisConnectionCommands, RedisKeyCommands interface signature

Package o.s.d.redis.listener
* Fixed bug causing the message channel to not be passed to the listener

Package o.s.d.redis.support.collection
* Added checks for incorrect pipeline/multi-exec access for better reporting


Changes in version 1.0.1.RELEASE (2012-06-27)
---------------------------------------------

General
* Introduced support for SRP (Sam's Redis Protocol)
* Introduced native execution through RedisConnection#execute
* Upgraded to Spring Framework 3.1.1
* Upgraded to Jedis 2.1.0
* Upgraded build system to Gradle 1.0

Package o.s.d.redis.connection
* Expanded set *store operations to return the resulting set size
* Refined RedisConnection#closePipeline contract by adding RedisPipelineException

Package o.s.d.redis.connection.jedis
* Improved exception translation of Jedis exceptions
* Fixed value bug in #setBit
* Added support for zRev* operations (new in Jedis 2.1)
* Added pipeline support for #zCount

Package o.s.d.redis.connection.jredis
* Fixed value bug in #setBit

Package o.s.d.redis.core
* Fixed bug in SetOperations#randomMember
* Fixed switched arguments in ZSetOperations#intersectAndStore
* Corrected handling of negative values in ValueOperations#increment
* Refined internal caching of serializers to cope with template configuration updates
* Expanded set *store operations to return the resulting set size
* Expanded ZSetOperations#removeRange* to return the number of elements removed
* Improved binding of Redis connections to thread
* Refined handling of pipelined connections to allow potential exceptions to properly propagate
* Expanded HashOperations#multiGet and #values to return List instead of Collection

Package o.s.d.redis.listener
* Improved lifecycle of RedisMessageListenerContainer
* Fixed bug causing double invocation of custom listeners also implementing MessageListener


Changes in version 1.0.0.RELEASE (2011-12-14)
---------------------------------------------

General
* Upgraded to Spring Framework 3.1 GA


Changes in version 1.0.0.RC1 (2011-10-19)
-----------------------------------------

General
* Upgraded to Spring Framework 3.1 RC1
* Upgraded slfj, Jackson libraries
* Changed compile source/target compatibility to JDK 1.5

Package o.s.d.redis.connection
* Added equals/hashCode/compareTo methods to TypedTuple

Package o.s.d.redis.core
* Fixed potential bug in RedisTemplate#sort
* Added equals/hashCode/compareTo methods to TypedTuple

Package o.s.d.redis.support
* Fixed potential bug in RedisProperties
* Improved Redis cache implementation under heavy concurrent access


Changes in version 1.0.0.M4 (2011-07-18)
----------------------------------------

General
* Split Spring Data Key Value project into separate projects for Redis and Riak
* Changed build system to Gradle
* Changed root package from org.springframework.data.keyvalue.redis to org.springframework.data.redis
* Introduced Redis implementation for Spring 3.1 cache abstraction
* Upgraded to Spring Framework 3.1 M2
* Upgraded to Jedis 2.0.0

Package o.s.d.redis.connection
* Added awarness of the selected Redis DB

Package o.s.d.redis.core
* Added missing zRange* operations
* Fixed incorrect cast in RedisTemplate#keys()
* Removed ConnectionFactory constructor

Package o.s.d.redis.listener
* Simplified namespace declaration for Redis pubsub

Package o.s.d.redis.support
* Improved compatibility of atomic counters with M2 release
* Added Properties implementation on top of Redis


Changes in version 1.0.0.M3 (2011-04-06)
----------------------------------------

Redis
-----

General
* Added support for RJC (new Redis client)
* Added dedicated SORT and SORT/GET support
* Introduced HashMapper feature for mapping objects to and from maps
* Improved exception hierarchy to be more consistent with Spring DAO
* Made several Redis dependencies optional to eliminate unnecessary jars from the classpath

Package o.s.d.k.redis.connection
* Added support for indexes to RedisConnectionFactories
* Added new key operations to KeyOperations (formerly KeyBound)
* Improved handling of Jedis exceptions

Package o.s.d.k.redis.core
* Serializers are exposed to RedisCallback
* Added missing operations (move, select) to RedisTemplate
* Fixed the signature of various method

Package o.s.d.k.redis.support.atomic
* Fixed incorrect serialization leading to error for RedisAtomicInteger & RedisAtomicLong


Changes in version 1.0.0.M2 (2011-02-10)
----------------------------------------

Redis
-----

General
* Added PubSub support (message listener container and namespace)
* Added JSON and Object/XML Mapping serializers
* Completed support for Redis (2.2) commands
* Improved documentation
* Upgraded to Redis 2.2
* Updraded to Jedis 1.5.2

Package o.s.d.k.redis.connection
* Added sort support
* Added pipelining support
* Added StringRedisConnection for String-focused operations
* Renamed JedisConnectionFactory pooling to usePool
* Renamed JredisConnectionFactory pooling to usePool

Package o.s.d.k.redis.connection.jedis
* Added support for Jedis rich exceptions
* Added support for broken pooled connection

Package o.s.d.k.redis.core
* Fix serializationg bug for hash value inside RedisTemplate
* Added injection for Redis operations ("views")

Package o.s.d.k.redis.support
* Refined AtomicInteger and AtomicLong constructors to use the backing store value as initial counter


Riak
----

General
* Important bug fixes
* Fully asynchronous AsyncRiakTemplate object
* Groovy DSL for Riak access using async template underneath


Changes in version Riak 1.0.0.M1 (2010-12-15)
---------------------------------------------
General
* Generified RiakTemplate for exception translation, serialization, and data access
* Built-in HTTP REST client based on Spring 3.0 RestTemplate
* java.io and Spring IO resource abstractions for reading/writing streams
* java.io.File subclass that represents a Riak resource


Changes in version Redis 1.0.0.M1 (2010-12-13)
----------------------------------------------
General
* Configuration support for Redis Jedis and JRedis drivers/connectors
* Connection package as low-level abstraction across multiple drivers
* Exception translation
* Generified RedisTemplate for exception translation and serialization support
* Various serialization strategies
* Atomic counter support classes
* JDK Collection implementations on top of Redis




























































