SPRING DATA REDIS CHANGELOG
---------------------------
http://projects.spring.io/spring-data-redis/

Commit changelog: http://github.com/spring-projects/spring-data-redis/tree/v[version]
Issues changelog: http://jira.springsource.org/secure/ReleaseNote.jspa?projectId=10604
===========================

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
