Commit Graph

672 Commits

Author SHA1 Message Date
Qiang Lee
2bc6aa8706 DATAREDIS-971 - Fix BitFieldType initialization through BitFieldSubCommands.signed().
We now initialize with the correct signed preference.

Original pull request: #447.
2019-04-17 15:32:44 +02:00
Mark Paluch
5cd8bb8e27 DATAREDIS-953 - Release connection after failed validation only once.
We now release a connection after a failed validation only once. Previously, a connection was released twice which caused a failure if the connection was obtained from a pool.

Original Pull Request: #445
2019-03-27 10:38:57 +01:00
Mark Paluch
138198fd0f DATAREDIS-950 - Fix ClassCastException on shared Lettuce Cluster connection validation.
Original Pull Request: #445
2019-03-27 10:30:13 +01:00
Christoph Strobl
70cb773afe DATAREDIS-925 - Add and register binary read/write converter for UUID.
Original pull request: #444.
2019-03-27 09:22:02 +01:00
Mark Paluch
321199c084 DATAREDIS-951 - Upgrade to Lettuce 5.1.6.
Replace custom builder adapter with ClusterClientOptions.builder(ClientOptions).
2019-03-27 08:56:34 +01:00
Mark Paluch
34bcd46620 DATAREDIS-794 - Improve Jedis Cluster Topology caching.
We now made JedisClusterTopologyProvider public and configurable through overriding JedisConnectionFactory.createTopologyProvider(…).

The topology provider accepts a configurable timeout to configure the cache timeout. Alternatively, custom ClusterTopologyProvider implementations can be returned through JedisConnectionFactory.createTopologyProvider(…).

Original Pull Request: #383
2019-03-26 13:47:48 +01:00
Mark Paluch
50818fbb32 DATAREDIS-949 - Consider max-redirects using Lettuce.
LettuceConnectionFactory now considers the maximal redirection limit for Redis Cluster redirections.

Previously, the max-redirects limit was not configured in Lettuce.

Original Pull Request: #417
2019-03-26 09:51:40 +01:00
Spring Operator
2eb7067e8c DATAREDIS-948 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 763 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).

Original Pull Request: #442
2019-03-22 10:22:27 +01:00
Spring Operator
64e7035f23 DATAREDIS-948 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://blog.springsource.com/2011/04/27/getting-started-redis-spring-cloud-foundry/ (301) with 1 occurrences migrated to:
  https://spring.io/blog/2011/04/27/getting-started-redis-spring-cloud-foundry/ ([https](https://blog.springsource.com/2011/04/27/getting-started-redis-spring-cloud-foundry/) result 404).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://static.springsource.org/spring-data/data-keyvalue/examples/retwisj/current/ (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/data-keyvalue/examples/retwisj/current/ ([https](https://static.springsource.org/spring-data/data-keyvalue/examples/retwisj/current/) result 200).
* [ ] http://docs.spring.io/spring/docs/ with 12 occurrences migrated to:
  https://docs.spring.io/spring/docs/ ([https](https://docs.spring.io/spring/docs/) result 200).
* [ ] http://en.wikipedia.org/wiki/JSON with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/JSON ([https](https://en.wikipedia.org/wiki/JSON) result 200).
* [ ] http://en.wikipedia.org/wiki/NoSQL with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/NoSQL ([https](https://en.wikipedia.org/wiki/NoSQL) result 200).
* [ ] http://github.com/lettuce-io/lettuce-core with 3 occurrences migrated to:
  https://github.com/lettuce-io/lettuce-core ([https](https://github.com/lettuce-io/lettuce-core) result 200).
* [ ] http://github.com/mp911de/lettuce with 1 occurrences migrated to:
  https://github.com/mp911de/lettuce ([https](https://github.com/mp911de/lettuce) result 200).
* [ ] http://github.com/spring-projects/spring-data-keyvalue-examples with 1 occurrences migrated to:
  https://github.com/spring-projects/spring-data-keyvalue-examples ([https](https://github.com/spring-projects/spring-data-keyvalue-examples) result 200).
* [ ] http://github.com/xetorthio/jedis with 5 occurrences migrated to:
  https://github.com/xetorthio/jedis ([https](https://github.com/xetorthio/jedis) result 200).
* [ ] http://netty.io/ with 1 occurrences migrated to:
  https://netty.io/ ([https](https://netty.io/) result 200).
* [ ] http://netty.io/wiki/native-transports.html with 1 occurrences migrated to:
  https://netty.io/wiki/native-transports.html ([https](https://netty.io/wiki/native-transports.html) result 200).
* [ ] http://openjdk.java.net/jeps/290 with 1 occurrences migrated to:
  https://openjdk.java.net/jeps/290 ([https](https://openjdk.java.net/jeps/290) result 200).
* [ ] http://projects.spring.io/spring-data-redis/ with 4 occurrences migrated to:
  https://projects.spring.io/spring-data-redis/ ([https](https://projects.spring.io/spring-data-redis/) result 200).
* [ ] http://projects.spring.io/spring-data/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-data/ ([https](https://projects.spring.io/spring-data/) result 200).
* [ ] http://projects.spring.io/spring-framework/ with 2 occurrences migrated to:
  https://projects.spring.io/spring-framework/ ([https](https://projects.spring.io/spring-framework/) result 200).
* [ ] http://redis.io with 3 occurrences migrated to:
  https://redis.io ([https](https://redis.io) result 200).
* [ ] http://redis.io/ with 3 occurrences migrated to:
  https://redis.io/ ([https](https://redis.io/) result 200).
* [ ] http://redis.io/commands with 8 occurrences migrated to:
  https://redis.io/commands ([https](https://redis.io/commands) result 200).
* [ ] http://redis.io/commands/append with 8 occurrences migrated to:
  https://redis.io/commands/append ([https](https://redis.io/commands/append) result 200).
* [ ] http://redis.io/commands/bgrewriteaof with 3 occurrences migrated to:
  https://redis.io/commands/bgrewriteaof ([https](https://redis.io/commands/bgrewriteaof) result 200).
* [ ] http://redis.io/commands/bgsave with 2 occurrences migrated to:
  https://redis.io/commands/bgsave ([https](https://redis.io/commands/bgsave) result 200).
* [ ] http://redis.io/commands/bitcount with 8 occurrences migrated to:
  https://redis.io/commands/bitcount ([https](https://redis.io/commands/bitcount) result 200).
* [ ] http://redis.io/commands/bitfield with 5 occurrences migrated to:
  https://redis.io/commands/bitfield ([https](https://redis.io/commands/bitfield) result 200).
* [ ] http://redis.io/commands/bitop with 5 occurrences migrated to:
  https://redis.io/commands/bitop ([https](https://redis.io/commands/bitop) result 200).
* [ ] http://redis.io/commands/bitpos with 4 occurrences migrated to:
  https://redis.io/commands/bitpos ([https](https://redis.io/commands/bitpos) result 200).
* [ ] http://redis.io/commands/blpop with 8 occurrences migrated to:
  https://redis.io/commands/blpop ([https](https://redis.io/commands/blpop) result 200).
* [ ] http://redis.io/commands/brpop with 8 occurrences migrated to:
  https://redis.io/commands/brpop ([https](https://redis.io/commands/brpop) result 200).
* [ ] http://redis.io/commands/brpoplpush with 7 occurrences migrated to:
  https://redis.io/commands/brpoplpush ([https](https://redis.io/commands/brpoplpush) result 200).
* [ ] http://redis.io/commands/client-getname with 2 occurrences migrated to:
  https://redis.io/commands/client-getname ([https](https://redis.io/commands/client-getname) result 200).
* [ ] http://redis.io/commands/client-kill with 2 occurrences migrated to:
  https://redis.io/commands/client-kill ([https](https://redis.io/commands/client-kill) result 200).
* [ ] http://redis.io/commands/client-list with 3 occurrences migrated to:
  https://redis.io/commands/client-list ([https](https://redis.io/commands/client-list) result 200).
* [ ] http://redis.io/commands/client-setname with 3 occurrences migrated to:
  https://redis.io/commands/client-setname ([https](https://redis.io/commands/client-setname) result 200).
* [ ] http://redis.io/commands/config-get with 2 occurrences migrated to:
  https://redis.io/commands/config-get ([https](https://redis.io/commands/config-get) result 200).
* [ ] http://redis.io/commands/config-resetstat with 2 occurrences migrated to:
  https://redis.io/commands/config-resetstat ([https](https://redis.io/commands/config-resetstat) result 200).
* [ ] http://redis.io/commands/config-set with 2 occurrences migrated to:
  https://redis.io/commands/config-set ([https](https://redis.io/commands/config-set) result 200).
* [ ] http://redis.io/commands/dbsize with 2 occurrences migrated to:
  https://redis.io/commands/dbsize ([https](https://redis.io/commands/dbsize) result 200).
* [ ] http://redis.io/commands/decr with 7 occurrences migrated to:
  https://redis.io/commands/decr ([https](https://redis.io/commands/decr) result 200).
* [ ] http://redis.io/commands/decrby with 7 occurrences migrated to:
  https://redis.io/commands/decrby ([https](https://redis.io/commands/decrby) result 200).
* [ ] http://redis.io/commands/del with 10 occurrences migrated to:
  https://redis.io/commands/del ([https](https://redis.io/commands/del) result 200).
* [ ] http://redis.io/commands/discard with 2 occurrences migrated to:
  https://redis.io/commands/discard ([https](https://redis.io/commands/discard) result 200).
* [ ] http://redis.io/commands/dump with 2 occurrences migrated to:
  https://redis.io/commands/dump ([https](https://redis.io/commands/dump) result 200).
* [ ] http://redis.io/commands/echo with 2 occurrences migrated to:
  https://redis.io/commands/echo ([https](https://redis.io/commands/echo) result 200).
* [ ] http://redis.io/commands/eval with 5 occurrences migrated to:
  https://redis.io/commands/eval ([https](https://redis.io/commands/eval) result 200).
* [ ] http://redis.io/commands/evalsha with 5 occurrences migrated to:
  https://redis.io/commands/evalsha ([https](https://redis.io/commands/evalsha) result 200).
* [ ] http://redis.io/commands/exec with 2 occurrences migrated to:
  https://redis.io/commands/exec ([https](https://redis.io/commands/exec) result 200).
* [ ] http://redis.io/commands/exists with 8 occurrences migrated to:
  https://redis.io/commands/exists ([https](https://redis.io/commands/exists) result 200).
* [ ] http://redis.io/commands/expire with 6 occurrences migrated to:
  https://redis.io/commands/expire ([https](https://redis.io/commands/expire) result 200).
* [ ] http://redis.io/commands/expireat with 4 occurrences migrated to:
  https://redis.io/commands/expireat ([https](https://redis.io/commands/expireat) result 200).
* [ ] http://redis.io/commands/flushall with 2 occurrences migrated to:
  https://redis.io/commands/flushall ([https](https://redis.io/commands/flushall) result 200).
* [ ] http://redis.io/commands/flushdb with 2 occurrences migrated to:
  https://redis.io/commands/flushdb ([https](https://redis.io/commands/flushdb) result 200).
* [ ] http://redis.io/commands/geoadd with 34 occurrences migrated to:
  https://redis.io/commands/geoadd ([https](https://redis.io/commands/geoadd) result 200).
* [ ] http://redis.io/commands/geodist with 18 occurrences migrated to:
  https://redis.io/commands/geodist ([https](https://redis.io/commands/geodist) result 200).
* [ ] http://redis.io/commands/geohash with 12 occurrences migrated to:
  https://redis.io/commands/geohash ([https](https://redis.io/commands/geohash) result 200).
* [ ] http://redis.io/commands/geopos with 12 occurrences migrated to:
  https://redis.io/commands/geopos ([https](https://redis.io/commands/geopos) result 200).
* [ ] http://redis.io/commands/georadius with 18 occurrences migrated to:
  https://redis.io/commands/georadius ([https](https://redis.io/commands/georadius) result 200).
* [ ] http://redis.io/commands/georadiusbymember with 25 occurrences migrated to:
  https://redis.io/commands/georadiusbymember ([https](https://redis.io/commands/georadiusbymember) result 200).
* [ ] http://redis.io/commands/get with 7 occurrences migrated to:
  https://redis.io/commands/get ([https](https://redis.io/commands/get) result 200).
* [ ] http://redis.io/commands/getbit with 6 occurrences migrated to:
  https://redis.io/commands/getbit ([https](https://redis.io/commands/getbit) result 200).
* [ ] http://redis.io/commands/getrange with 7 occurrences migrated to:
  https://redis.io/commands/getrange ([https](https://redis.io/commands/getrange) result 200).
* [ ] http://redis.io/commands/getset with 7 occurrences migrated to:
  https://redis.io/commands/getset ([https](https://redis.io/commands/getset) result 200).
* [ ] http://redis.io/commands/hdel with 6 occurrences migrated to:
  https://redis.io/commands/hdel ([https](https://redis.io/commands/hdel) result 200).
* [ ] http://redis.io/commands/hexists with 3 occurrences migrated to:
  https://redis.io/commands/hexists ([https](https://redis.io/commands/hexists) result 200).
* [ ] http://redis.io/commands/hexits with 2 occurrences migrated to:
  https://redis.io/commands/hexits ([https](https://redis.io/commands/hexits) result 200).
* [ ] http://redis.io/commands/hget with 4 occurrences migrated to:
  https://redis.io/commands/hget ([https](https://redis.io/commands/hget) result 200).
* [ ] http://redis.io/commands/hgetall with 4 occurrences migrated to:
  https://redis.io/commands/hgetall ([https](https://redis.io/commands/hgetall) result 200).
* [ ] http://redis.io/commands/hincrby with 5 occurrences migrated to:
  https://redis.io/commands/hincrby ([https](https://redis.io/commands/hincrby) result 200).
* [ ] http://redis.io/commands/hincrbyfloat with 2 occurrences migrated to:
  https://redis.io/commands/hincrbyfloat ([https](https://redis.io/commands/hincrbyfloat) result 200).
* [ ] http://redis.io/commands/hkeys with 4 occurrences migrated to:
  https://redis.io/commands/hkeys ([https](https://redis.io/commands/hkeys) result 200).
* [ ] http://redis.io/commands/hlen with 4 occurrences migrated to:
  https://redis.io/commands/hlen ([https](https://redis.io/commands/hlen) result 200).
* [ ] http://redis.io/commands/hmget with 4 occurrences migrated to:
  https://redis.io/commands/hmget ([https](https://redis.io/commands/hmget) result 200).
* [ ] http://redis.io/commands/hmset with 3 occurrences migrated to:
  https://redis.io/commands/hmset ([https](https://redis.io/commands/hmset) result 200).
* [ ] http://redis.io/commands/hscan with 7 occurrences migrated to:
  https://redis.io/commands/hscan ([https](https://redis.io/commands/hscan) result 200).
* [ ] http://redis.io/commands/hset with 5 occurrences migrated to:
  https://redis.io/commands/hset ([https](https://redis.io/commands/hset) result 200).
* [ ] http://redis.io/commands/hsetnx with 3 occurrences migrated to:
  https://redis.io/commands/hsetnx ([https](https://redis.io/commands/hsetnx) result 200).
* [ ] http://redis.io/commands/hstrlen with 1 occurrences migrated to:
  https://redis.io/commands/hstrlen ([https](https://redis.io/commands/hstrlen) result 200).
* [ ] http://redis.io/commands/hvals with 4 occurrences migrated to:
  https://redis.io/commands/hvals ([https](https://redis.io/commands/hvals) result 200).
* [ ] http://redis.io/commands/incr with 7 occurrences migrated to:
  https://redis.io/commands/incr ([https](https://redis.io/commands/incr) result 200).
* [ ] http://redis.io/commands/incrby with 8 occurrences migrated to:
  https://redis.io/commands/incrby ([https](https://redis.io/commands/incrby) result 200).
* [ ] http://redis.io/commands/incrbyfloat with 7 occurrences migrated to:
  https://redis.io/commands/incrbyfloat ([https](https://redis.io/commands/incrbyfloat) result 200).
* [ ] http://redis.io/commands/info with 4 occurrences migrated to:
  https://redis.io/commands/info ([https](https://redis.io/commands/info) result 200).
* [ ] http://redis.io/commands/keys with 6 occurrences migrated to:
  https://redis.io/commands/keys ([https](https://redis.io/commands/keys) result 200).
* [ ] http://redis.io/commands/lastsave with 2 occurrences migrated to:
  https://redis.io/commands/lastsave ([https](https://redis.io/commands/lastsave) result 200).
* [ ] http://redis.io/commands/lindex with 8 occurrences migrated to:
  https://redis.io/commands/lindex ([https](https://redis.io/commands/lindex) result 200).
* [ ] http://redis.io/commands/linsert with 5 occurrences migrated to:
  https://redis.io/commands/linsert ([https](https://redis.io/commands/linsert) result 200).
* [ ] http://redis.io/commands/llen with 7 occurrences migrated to:
  https://redis.io/commands/llen ([https](https://redis.io/commands/llen) result 200).
* [ ] http://redis.io/commands/lpop with 8 occurrences migrated to:
  https://redis.io/commands/lpop ([https](https://redis.io/commands/lpop) result 200).
* [ ] http://redis.io/commands/lpush with 19 occurrences migrated to:
  https://redis.io/commands/lpush ([https](https://redis.io/commands/lpush) result 200).
* [ ] http://redis.io/commands/lpushx with 6 occurrences migrated to:
  https://redis.io/commands/lpushx ([https](https://redis.io/commands/lpushx) result 200).
* [ ] http://redis.io/commands/lrange with 7 occurrences migrated to:
  https://redis.io/commands/lrange ([https](https://redis.io/commands/lrange) result 200).
* [ ] http://redis.io/commands/lrem with 9 occurrences migrated to:
  https://redis.io/commands/lrem ([https](https://redis.io/commands/lrem) result 200).
* [ ] http://redis.io/commands/lset with 8 occurrences migrated to:
  https://redis.io/commands/lset ([https](https://redis.io/commands/lset) result 200).
* [ ] http://redis.io/commands/ltrim with 7 occurrences migrated to:
  https://redis.io/commands/ltrim ([https](https://redis.io/commands/ltrim) result 200).
* [ ] http://redis.io/commands/mget with 6 occurrences migrated to:
  https://redis.io/commands/mget ([https](https://redis.io/commands/mget) result 200).
* [ ] http://redis.io/commands/migrate with 2 occurrences migrated to:
  https://redis.io/commands/migrate ([https](https://redis.io/commands/migrate) result 200).
* [ ] http://redis.io/commands/move with 7 occurrences migrated to:
  https://redis.io/commands/move ([https](https://redis.io/commands/move) result 200).
* [ ] http://redis.io/commands/mset with 8 occurrences migrated to:
  https://redis.io/commands/mset ([https](https://redis.io/commands/mset) result 200).
* [ ] http://redis.io/commands/msetnx with 5 occurrences migrated to:
  https://redis.io/commands/msetnx ([https](https://redis.io/commands/msetnx) result 200).
* [ ] http://redis.io/commands/multi with 2 occurrences migrated to:
  https://redis.io/commands/multi ([https](https://redis.io/commands/multi) result 200).
* [ ] http://redis.io/commands/object with 6 occurrences migrated to:
  https://redis.io/commands/object ([https](https://redis.io/commands/object) result 200).
* [ ] http://redis.io/commands/persist with 6 occurrences migrated to:
  https://redis.io/commands/persist ([https](https://redis.io/commands/persist) result 200).
* [ ] http://redis.io/commands/pexpire with 6 occurrences migrated to:
  https://redis.io/commands/pexpire ([https](https://redis.io/commands/pexpire) result 200).
* [ ] http://redis.io/commands/pexpireat with 4 occurrences migrated to:
  https://redis.io/commands/pexpireat ([https](https://redis.io/commands/pexpireat) result 200).
* [ ] http://redis.io/commands/pfadd with 6 occurrences migrated to:
  https://redis.io/commands/pfadd ([https](https://redis.io/commands/pfadd) result 200).
* [ ] http://redis.io/commands/pfcount with 6 occurrences migrated to:
  https://redis.io/commands/pfcount ([https](https://redis.io/commands/pfcount) result 200).
* [ ] http://redis.io/commands/pfmerge with 5 occurrences migrated to:
  https://redis.io/commands/pfmerge ([https](https://redis.io/commands/pfmerge) result 200).
* [ ] http://redis.io/commands/ping with 2 occurrences migrated to:
  https://redis.io/commands/ping ([https](https://redis.io/commands/ping) result 200).
* [ ] http://redis.io/commands/psetex with 4 occurrences migrated to:
  https://redis.io/commands/psetex ([https](https://redis.io/commands/psetex) result 200).
* [ ] http://redis.io/commands/psubscribe with 3 occurrences migrated to:
  https://redis.io/commands/psubscribe ([https](https://redis.io/commands/psubscribe) result 200).
* [ ] http://redis.io/commands/pttl with 6 occurrences migrated to:
  https://redis.io/commands/pttl ([https](https://redis.io/commands/pttl) result 200).
* [ ] http://redis.io/commands/publish with 6 occurrences migrated to:
  https://redis.io/commands/publish ([https](https://redis.io/commands/publish) result 200).
* [ ] http://redis.io/commands/randomkey with 4 occurrences migrated to:
  https://redis.io/commands/randomkey ([https](https://redis.io/commands/randomkey) result 200).
* [ ] http://redis.io/commands/rename with 7 occurrences migrated to:
  https://redis.io/commands/rename ([https](https://redis.io/commands/rename) result 200).
* [ ] http://redis.io/commands/renamenx with 6 occurrences migrated to:
  https://redis.io/commands/renamenx ([https](https://redis.io/commands/renamenx) result 200).
* [ ] http://redis.io/commands/restore with 4 occurrences migrated to:
  https://redis.io/commands/restore ([https](https://redis.io/commands/restore) result 200).
* [ ] http://redis.io/commands/rpop with 8 occurrences migrated to:
  https://redis.io/commands/rpop ([https](https://redis.io/commands/rpop) result 200).
* [ ] http://redis.io/commands/rpoplpush with 7 occurrences migrated to:
  https://redis.io/commands/rpoplpush ([https](https://redis.io/commands/rpoplpush) result 200).
* [ ] http://redis.io/commands/rpush with 13 occurrences migrated to:
  https://redis.io/commands/rpush ([https](https://redis.io/commands/rpush) result 200).
* [ ] http://redis.io/commands/rpushx with 6 occurrences migrated to:
  https://redis.io/commands/rpushx ([https](https://redis.io/commands/rpushx) result 200).
* [ ] http://redis.io/commands/sadd with 9 occurrences migrated to:
  https://redis.io/commands/sadd ([https](https://redis.io/commands/sadd) result 200).
* [ ] http://redis.io/commands/save with 2 occurrences migrated to:
  https://redis.io/commands/save ([https](https://redis.io/commands/save) result 200).
* [ ] http://redis.io/commands/scan with 8 occurrences migrated to:
  https://redis.io/commands/scan ([https](https://redis.io/commands/scan) result 200).
* [ ] http://redis.io/commands/scard with 7 occurrences migrated to:
  https://redis.io/commands/scard ([https](https://redis.io/commands/scard) result 200).
* [ ] http://redis.io/commands/script-exists with 2 occurrences migrated to:
  https://redis.io/commands/script-exists ([https](https://redis.io/commands/script-exists) result 200).
* [ ] http://redis.io/commands/script-flush with 2 occurrences migrated to:
  https://redis.io/commands/script-flush ([https](https://redis.io/commands/script-flush) result 200).
* [ ] http://redis.io/commands/script-kill with 2 occurrences migrated to:
  https://redis.io/commands/script-kill ([https](https://redis.io/commands/script-kill) result 200).
* [ ] http://redis.io/commands/script-load with 3 occurrences migrated to:
  https://redis.io/commands/script-load ([https](https://redis.io/commands/script-load) result 200).
* [ ] http://redis.io/commands/sdiff with 13 occurrences migrated to:
  https://redis.io/commands/sdiff ([https](https://redis.io/commands/sdiff) result 200).
* [ ] http://redis.io/commands/sdiffstore with 13 occurrences migrated to:
  https://redis.io/commands/sdiffstore ([https](https://redis.io/commands/sdiffstore) result 200).
* [ ] http://redis.io/commands/select with 1 occurrences migrated to:
  https://redis.io/commands/select ([https](https://redis.io/commands/select) result 200).
* [ ] http://redis.io/commands/set with 24 occurrences migrated to:
  https://redis.io/commands/set ([https](https://redis.io/commands/set) result 200).
* [ ] http://redis.io/commands/setbit with 7 occurrences migrated to:
  https://redis.io/commands/setbit ([https](https://redis.io/commands/setbit) result 200).
* [ ] http://redis.io/commands/setex with 9 occurrences migrated to:
  https://redis.io/commands/setex ([https](https://redis.io/commands/setex) result 200).
* [ ] http://redis.io/commands/setnx with 7 occurrences migrated to:
  https://redis.io/commands/setnx ([https](https://redis.io/commands/setnx) result 200).
* [ ] http://redis.io/commands/setrange with 8 occurrences migrated to:
  https://redis.io/commands/setrange ([https](https://redis.io/commands/setrange) result 200).
* [ ] http://redis.io/commands/shutdown with 2 occurrences migrated to:
  https://redis.io/commands/shutdown ([https](https://redis.io/commands/shutdown) result 200).
* [ ] http://redis.io/commands/sinter with 13 occurrences migrated to:
  https://redis.io/commands/sinter ([https](https://redis.io/commands/sinter) result 200).
* [ ] http://redis.io/commands/sinterstore with 13 occurrences migrated to:
  https://redis.io/commands/sinterstore ([https](https://redis.io/commands/sinterstore) result 200).
* [ ] http://redis.io/commands/sismember with 8 occurrences migrated to:
  https://redis.io/commands/sismember ([https](https://redis.io/commands/sismember) result 200).
* [ ] http://redis.io/commands/slaveof with 4 occurrences migrated to:
  https://redis.io/commands/slaveof ([https](https://redis.io/commands/slaveof) result 200).
* [ ] http://redis.io/commands/smembers with 7 occurrences migrated to:
  https://redis.io/commands/smembers ([https](https://redis.io/commands/smembers) result 200).
* [ ] http://redis.io/commands/smove with 8 occurrences migrated to:
  https://redis.io/commands/smove ([https](https://redis.io/commands/smove) result 200).
* [ ] http://redis.io/commands/sort with 9 occurrences migrated to:
  https://redis.io/commands/sort ([https](https://redis.io/commands/sort) result 200).
* [ ] http://redis.io/commands/spop with 14 occurrences migrated to:
  https://redis.io/commands/spop ([https](https://redis.io/commands/spop) result 200).
* [ ] http://redis.io/commands/srandmember with 17 occurrences migrated to:
  https://redis.io/commands/srandmember ([https](https://redis.io/commands/srandmember) result 200).
* [ ] http://redis.io/commands/srem with 9 occurrences migrated to:
  https://redis.io/commands/srem ([https](https://redis.io/commands/srem) result 200).
* [ ] http://redis.io/commands/sscan with 5 occurrences migrated to:
  https://redis.io/commands/sscan ([https](https://redis.io/commands/sscan) result 200).
* [ ] http://redis.io/commands/strlen with 7 occurrences migrated to:
  https://redis.io/commands/strlen ([https](https://redis.io/commands/strlen) result 200).
* [ ] http://redis.io/commands/subscribe with 3 occurrences migrated to:
  https://redis.io/commands/subscribe ([https](https://redis.io/commands/subscribe) result 200).
* [ ] http://redis.io/commands/sunion with 13 occurrences migrated to:
  https://redis.io/commands/sunion ([https](https://redis.io/commands/sunion) result 200).
* [ ] http://redis.io/commands/sunionstore with 13 occurrences migrated to:
  https://redis.io/commands/sunionstore ([https](https://redis.io/commands/sunionstore) result 200).
* [ ] http://redis.io/commands/time with 2 occurrences migrated to:
  https://redis.io/commands/time ([https](https://redis.io/commands/time) result 200).
* [ ] http://redis.io/commands/touch with 4 occurrences migrated to:
  https://redis.io/commands/touch ([https](https://redis.io/commands/touch) result 200).
* [ ] http://redis.io/commands/ttl with 8 occurrences migrated to:
  https://redis.io/commands/ttl ([https](https://redis.io/commands/ttl) result 200).
* [ ] http://redis.io/commands/type with 6 occurrences migrated to:
  https://redis.io/commands/type ([https](https://redis.io/commands/type) result 200).
* [ ] http://redis.io/commands/unlink with 10 occurrences migrated to:
  https://redis.io/commands/unlink ([https](https://redis.io/commands/unlink) result 200).
* [ ] http://redis.io/commands/unwatch with 2 occurrences migrated to:
  https://redis.io/commands/unwatch ([https](https://redis.io/commands/unwatch) result 200).
* [ ] http://redis.io/commands/watch with 3 occurrences migrated to:
  https://redis.io/commands/watch ([https](https://redis.io/commands/watch) result 200).
* [ ] http://redis.io/commands/xack with 12 occurrences migrated to:
  https://redis.io/commands/xack ([https](https://redis.io/commands/xack) result 200).
* [ ] http://redis.io/commands/xadd with 14 occurrences migrated to:
  https://redis.io/commands/xadd ([https](https://redis.io/commands/xadd) result 200).
* [ ] http://redis.io/commands/xdel with 12 occurrences migrated to:
  https://redis.io/commands/xdel ([https](https://redis.io/commands/xdel) result 200).
* [ ] http://redis.io/commands/xlen with 7 occurrences migrated to:
  https://redis.io/commands/xlen ([https](https://redis.io/commands/xlen) result 200).
* [ ] http://redis.io/commands/xrange with 19 occurrences migrated to:
  https://redis.io/commands/xrange ([https](https://redis.io/commands/xrange) result 200).
* [ ] http://redis.io/commands/xread with 21 occurrences migrated to:
  https://redis.io/commands/xread ([https](https://redis.io/commands/xread) result 200).
* [ ] http://redis.io/commands/xreadgroup with 19 occurrences migrated to:
  https://redis.io/commands/xreadgroup ([https](https://redis.io/commands/xreadgroup) result 200).
* [ ] http://redis.io/commands/xrevrange with 19 occurrences migrated to:
  https://redis.io/commands/xrevrange ([https](https://redis.io/commands/xrevrange) result 200).
* [ ] http://redis.io/commands/xtrim with 8 occurrences migrated to:
  https://redis.io/commands/xtrim ([https](https://redis.io/commands/xtrim) result 200).
* [ ] http://redis.io/commands/zadd with 14 occurrences migrated to:
  https://redis.io/commands/zadd ([https](https://redis.io/commands/zadd) result 200).
* [ ] http://redis.io/commands/zcard with 9 occurrences migrated to:
  https://redis.io/commands/zcard ([https](https://redis.io/commands/zcard) result 200).
* [ ] http://redis.io/commands/zcount with 9 occurrences migrated to:
  https://redis.io/commands/zcount ([https](https://redis.io/commands/zcount) result 200).
* [ ] http://redis.io/commands/zincrby with 8 occurrences migrated to:
  https://redis.io/commands/zincrby ([https](https://redis.io/commands/zincrby) result 200).
* [ ] http://redis.io/commands/zinterstore with 24 occurrences migrated to:
  https://redis.io/commands/zinterstore ([https](https://redis.io/commands/zinterstore) result 200).
* [ ] http://redis.io/commands/zrange with 14 occurrences migrated to:
  https://redis.io/commands/zrange ([https](https://redis.io/commands/zrange) result 200).
* [ ] http://redis.io/commands/zrangebylex with 16 occurrences migrated to:
  https://redis.io/commands/zrangebylex ([https](https://redis.io/commands/zrangebylex) result 200).
* [ ] http://redis.io/commands/zrangebyscore with 32 occurrences migrated to:
  https://redis.io/commands/zrangebyscore ([https](https://redis.io/commands/zrangebyscore) result 200).
* [ ] http://redis.io/commands/zrank with 8 occurrences migrated to:
  https://redis.io/commands/zrank ([https](https://redis.io/commands/zrank) result 200).
* [ ] http://redis.io/commands/zrem with 11 occurrences migrated to:
  https://redis.io/commands/zrem ([https](https://redis.io/commands/zrem) result 200).
* [ ] http://redis.io/commands/zremrangebyrank with 8 occurrences migrated to:
  https://redis.io/commands/zremrangebyrank ([https](https://redis.io/commands/zremrangebyrank) result 200).
* [ ] http://redis.io/commands/zremrangebyscore with 9 occurrences migrated to:
  https://redis.io/commands/zremrangebyscore ([https](https://redis.io/commands/zremrangebyscore) result 200).
* [ ] http://redis.io/commands/zrevrange with 19 occurrences migrated to:
  https://redis.io/commands/zrevrange ([https](https://redis.io/commands/zrevrange) result 200).
* [ ] http://redis.io/commands/zrevrangebylex with 6 occurrences migrated to:
  https://redis.io/commands/zrevrangebylex ([https](https://redis.io/commands/zrevrangebylex) result 200).
* [ ] http://redis.io/commands/zrevrangebyscore with 23 occurrences migrated to:
  https://redis.io/commands/zrevrangebyscore ([https](https://redis.io/commands/zrevrangebyscore) result 200).
* [ ] http://redis.io/commands/zrevrank with 8 occurrences migrated to:
  https://redis.io/commands/zrevrank ([https](https://redis.io/commands/zrevrank) result 200).
* [ ] http://redis.io/commands/zscan with 8 occurrences migrated to:
  https://redis.io/commands/zscan ([https](https://redis.io/commands/zscan) result 200).
* [ ] http://redis.io/commands/zscore with 8 occurrences migrated to:
  https://redis.io/commands/zscore ([https](https://redis.io/commands/zscore) result 200).
* [ ] http://redis.io/commands/zunionstore with 24 occurrences migrated to:
  https://redis.io/commands/zunionstore ([https](https://redis.io/commands/zunionstore) result 200).
* [ ] http://redis.io/topics/cluster-spec with 2 occurrences migrated to:
  https://redis.io/topics/cluster-spec ([https](https://redis.io/topics/cluster-spec) result 200).
* [ ] http://redis.io/topics/cluster-tutorial with 2 occurrences migrated to:
  https://redis.io/topics/cluster-tutorial ([https](https://redis.io/topics/cluster-tutorial) result 200).
* [ ] http://redis.io/topics/indexes with 2 occurrences migrated to:
  https://redis.io/topics/indexes ([https](https://redis.io/topics/indexes) result 200).
* [ ] http://redis.io/topics/notifications with 1 occurrences migrated to:
  https://redis.io/topics/notifications ([https](https://redis.io/topics/notifications) result 200).
* [ ] http://redis.io/topics/pipelining with 1 occurrences migrated to:
  https://redis.io/topics/pipelining ([https](https://redis.io/topics/pipelining) result 200).
* [ ] http://redis.io/topics/sentinel with 2 occurrences migrated to:
  https://redis.io/topics/sentinel ([https](https://redis.io/topics/sentinel) result 200).
* [ ] http://redis.io/topics/transactions with 1 occurrences migrated to:
  https://redis.io/topics/transactions ([https](https://redis.io/topics/transactions) result 200).
* [ ] http://spring.io/ with 1 occurrences migrated to:
  https://spring.io/ ([https](https://spring.io/) result 200).
* [ ] http://spring.io/blog/ with 1 occurrences migrated to:
  https://spring.io/blog/ ([https](https://spring.io/blog/) result 200).
* [ ] http://spring.io/guides with 1 occurrences migrated to:
  https://spring.io/guides ([https](https://spring.io/guides) result 200).
* [ ] http://spring.io/spring-data with 1 occurrences migrated to:
  https://spring.io/spring-data ([https](https://spring.io/spring-data) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-data with 3 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-data ([https](https://stackoverflow.com/questions/tagged/spring-data) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-data-redis with 2 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-data-redis ([https](https://stackoverflow.com/questions/tagged/spring-data-redis) result 200).
* [ ] http://twitter.com/SpringData with 1 occurrences migrated to:
  https://twitter.com/SpringData ([https](https://twitter.com/SpringData) result 200).
* [ ] http://twitter.com/springdata with 1 occurrences migrated to:
  https://twitter.com/springdata ([https](https://twitter.com/springdata) result 200).
* [ ] http://www.google.com/search?q=nosoql+acronym with 1 occurrences migrated to:
  https://www.google.com/search?q=nosoql+acronym ([https](https://www.google.com/search?q=nosoql+acronym) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 5 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* [ ] http://www.springframework.org/schema/tool/spring-tool.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/tool/spring-tool.xsd ([https](https://www.springframework.org/schema/tool/spring-tool.xsd) result 200).
* [ ] http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* [ ] http://docs.spring.io/spring-data/data-redis/docs/current/api/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/data-redis/docs/current/api/ ([https](https://docs.spring.io/spring-data/data-redis/docs/current/api/) result 301).
* [ ] http://docs.spring.io/spring-data/data-redis/docs/current/reference/html/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/ ([https](https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/) result 301).
* [ ] http://help.github.com/forking/ with 1 occurrences migrated to:
  https://help.github.com/forking/ ([https](https://help.github.com/forking/) result 301).
* [ ] http://www.pivotal.io/ with 1 occurrences migrated to:
  https://www.pivotal.io/ ([https](https://www.pivotal.io/) result 301).
* [ ] http://www.springframework.org/schema/redis/spring-redis-1.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/redis/spring-redis-1.0.xsd ([https](https://www.springframework.org/schema/redis/spring-redis-1.0.xsd) result 301).
* [ ] http://www.springframework.org/schema/redis/spring-redis.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/redis/spring-redis.xsd ([https](https://www.springframework.org/schema/redis/spring-redis.xsd) result 301).
* [ ] http://download.oracle.com/javase/8/docs/api/java/util/Collection.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/8/docs/api/java/util/Collection.html ([https](https://download.oracle.com/javase/8/docs/api/java/util/Collection.html) result 302).
* [ ] http://download.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html ([https](https://download.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html) result 302).
* [ ] http://repo.spring.io/libs-milestone with 1 occurrences migrated to:
  https://repo.spring.io/libs-milestone ([https](https://repo.spring.io/libs-milestone) result 302).
* [ ] http://repo.spring.io/libs-snapshot with 2 occurrences migrated to:
  https://repo.spring.io/libs-snapshot ([https](https://repo.spring.io/libs-snapshot) result 302).

# Ignored
These URLs were intentionally ignored.

* http://localhost:1234 with 3 occurrences
* http://www.springframework.org/schema/beans with 10 occurrences
* http://www.springframework.org/schema/p with 4 occurrences
* http://www.springframework.org/schema/redis with 4 occurrences
* http://www.springframework.org/schema/tool with 2 occurrences
* http://www.w3.org/2001/XMLSchema with 1 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 6 occurrences

Original Pull Request: #416
2019-03-21 08:07:37 +01:00
Mark Paluch
5d5a3e55cf DATAREDIS-947 - Polishing.
Inline method.

Original pull request: #390.
Related ticket: DATAREDIS-749.
2019-03-19 11:14:14 +01:00
Serhii Siryi
91c8739497 DATAREDIS-947 - Remove redundant reflective code from JedisClientUtils.
Replace using CLIENT_FIELD with direct call of Jedis#getClient
Remove unused PROTOCOL_SEND_COMMAND after DATAREDIS-749.

Original pull request: #390.
Related ticket: DATAREDIS-749.
2019-03-19 11:13:32 +01:00
Oliver Drotbohm
77f6582aee DATAREDIS-944 - Move off deprecations in Spring Data Commons.
Related ticket: DATACMNS-1496.
2019-03-14 14:19:54 +01:00
Mark Paluch
22fdaba350 DATAREDIS-888 - Use Lettuce's read-only Partition view for node conversion.
We now use the read-only view of Lettuce's Partition object to convert Lettuce RedisClusterNode objects into Spring Data RedisClusterNode. The read-only view is atomic and does not require external synchronization.

Original Pull Request: #384
2019-02-28 11:31:32 +01:00
Christoph Strobl
3816b41dc8 DATAREDIS-937 - Polishing.
Original Pull Request: #386
2019-02-28 10:12:58 +01:00
Mark Paluch
22698a2976 DATAREDIS-937 - Add equals/hashCode methods to RedisZSetCommands.Weights.
Original Pull Request: #386
2019-02-28 10:12:29 +01:00
Christoph Strobl
087dba0735 DATAREDIS-848 - Polishing.
Original Pull Request: #382
2019-02-28 10:09:35 +01:00
Mark Paluch
cd05e5c0b9 DATAREDIS-848 - Use Lettuce's RestoreArgs to restore a key with replace option.
We now use RestoreArgs instead of constructing a custom command.

Original Pull Request: #382
2019-02-28 10:09:14 +01:00
Christoph Strobl
630ff46b45 DATAREDIS-935 - Allow configuration of a single initial cache in RedisCacheManagerBuilder.
Also, add introspection methods to expose the configured cache names/configurations.

Original pull request: #387.
2019-02-27 15:19:19 +01:00
Mark Paluch
32cc2a60e7 DATAREDIS-932 - Fix typo in exception message. 2019-02-18 08:48:24 +01:00
Mark Paluch
2622f054ab DATAREDIS-930 - Polishing.
Add since tags. Simplify test using Lombok annotations. Reformat code.

Original pull request: #385.
2019-02-15 11:09:38 +01:00
Luis De Bello
34951495ba DATAREDIS-930 - Return port/host of WithHostAndPort configurations using LettuceConnectionFactory.getPort() and getHost().
We now correctly return host and port from configurations that implement WithHostAndPort instead of always using RedisStandaloneConfiguration.

Original pull request: #385.
2019-02-15 11:08:08 +01:00
Mark Paluch
62e48be873 DATAREDIS-918 - Enable Lettuce's global timeouts by default.
LettuceClientConfiguration now enables Lettuce's global timeouts by default to enable timeouts using the reactive API. This change prevents hanging Redis commands due to a blocked connection or when Redis is down. Timeouts are enabled through defaulting so setting ClientOptions or ClusterClientOptions overrides this behavior.

Original Pull Request: #381
2019-01-09 13:38:29 +01:00
Mark Paluch
f253d4128d DATAREDIS-749 - Polishing.
Upgrade to Jedis 3.0. Remove reflective sendCommand calls in favor of public Jedis sendCommand API. Invocations with null arguments by introducing overloads with argument defaulting. Fix exception translation because of a changed exception hierarchy. Fix tests and adapt tests to new transactional results that return null values instead if empty collections for nested array responses.

Reformat code. Add author tags. Add note to reference docs.

Original pull request: #374.
2019-01-08 09:37:34 +01:00
Guy Korland
f4680a180c DATAREDIS-749 - Upgrade to Jedis 3.0.0 M1.
Upgrade dependency version to 3.0.0 M1. Adapt to API changes.

Original pull request: #374.
2019-01-08 09:37:31 +01:00
Mark Paluch
3a07a0d8ed DATAREDIS-917 - Update copyright years to 2019. 2019-01-02 14:16:01 +01:00
Mark Paluch
7ec4641cc1 DATAREDIS-913 - Delete multiple keys through ReactiveRedisTemplate.delete(Publisher) and unlink(Publisher).
We now delete all keys that are emitted by the source publisher when invoking delete(Publisher) and unlink(Publisher). Both methods split incoming keys into chunks of 128 keys to keep a balance between latency and the issued command count.

Previously, delete(Publisher) and unlink(Publisher) only deleted the first key.

Original Pull Request: #379
2018-12-20 09:42:43 +01:00
Mark Paluch
d248c0cd7c DATAREDIS-909 - Fix constructor creation of entities with collection-typed properties.
We now consider the property type in value conversion for constructor arguments to provide the appropriate value type. Previously, we considered the component type which converted a Collection<T> to a single T that caused downstream ClassCastException.

Original Pull Request: #378
2018-12-20 08:54:12 +01:00
Mark Paluch
1f4bb973ea DATAREDIS-865 - Expose GenericJackson2JsonRedisSerializer.registerNullValueSerializer() for ObjectMapper customization.
We now expose registerNullValueSerializer(…) on GenericJackson2JsonRedisSerializer to allow customization of an externally provided ObjectMapper. NullValueSerializer was previously registered only within a constructor that takes classPropertyTypeName and provided no further possibilities to customize ObjectMapper.

Code wishing to provide a custom ObjectMapper can now call GenericJackson2JsonRedisSerializer.registerNullValueSerializer(objectMapper, …) and perform additional customizations before using ObjectMapper with GenericJackson2JsonRedisSerializer.

Original Pull Request: #376
2018-12-20 08:35:30 +01:00
Mark Paluch
ed79d14355 DATAREDIS-905 - Fix race condition in StreamMessageListenerContainer subscription activation.
Stream subscriptions now report reliably their state reflecting regarding activation, cancellation and while being active.

Previously, registering a subscription with immediate cancel could report an inactive subscription although StreamMessageListenerContainer could perform a stream read.

When activating a subscription in StreamMessageListenerContainer, awaiting activation (awaitStart(…)), immediately cancelling the subscription, and reading active state via Subscription.isActive(), Subscription.isActive() could report in this case false. This was because we checked that the status was either running or the stream read has reached event looping. The state was CANCELLED and the task thread had not yet reached the event loop and so there was a gap.

Original Pull Request: #377
2018-12-20 08:20:45 +01:00
chao chang
b510ef0606 DATAREDIS-903 - Remove Javadoc for unused RedisClusterConfiguration settings.
The following configuration keys which are not used in RedisClusterConfiguration, are removed from the Javadoc.
	 * spring.redis.cluster.timeout=5
	 * spring.redis.cluster.password=foobar

Original pull request: #375.
2018-12-06 08:46:59 +01:00
Christoph Strobl
c8bfc71678 DATAREDIS-721 - Polishing.
Original Pull Request: #315
2018-11-30 14:42:31 +01:00
Mark Paluch
b496aab2fb DATAREDIS-721 - Switch to non-blocking connect methods.
We now connect asynchronously to expose non-blocking connection behavior for reactive API usage. We also use a non-blocking, asynchronous pool implementation for connections that are used through a reactive API. Shared connection usage, which is blocking on the very first access can be pre-initialized during connection factory initialization instead of initialization on first access:

LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory();
connectionFactory.setEagerInitialization(true);
connectionFactory.afterPropertiesSet();

We no longer require offloading of blocking connects to a dedicated scheduler which makes reactive API usage fully non-blocking.

Original Pull Request: #315
2018-11-30 12:54:12 +01:00
Mark Paluch
b440dc1f1f DATAREDIS-873 - Polishing.
Add since tags. Add tests. Reformat code. Update docs.

Original pull request: #361.
2018-11-23 12:01:56 +01:00
Dominys
724579b8a9 DATAREDIS-873 - Accept single collection parameter in SetOperations diff/inter/union methods.
We now accept a single collection parameter containing keys for diff/inter/union and their …store methods. Note that diff requires a specific key order to denote the initial set to compare to.

Original pull request: #361.
2018-11-23 12:01:46 +01:00
Mark Paluch
6921ab01bf DATAREDIS-890 - Polishing.
Add author tags. Use try-with-resources to close Jedis.

Original pull request: #373.
2018-11-23 10:18:00 +01:00
ChenGuanqun
9d47c48e22 DATAREDIS-890 - Randomize Redis Cluster node order before topology retrieval.
We now shuffle the set of Redis Cluster nodes before retrieving the topology. This change reduces load on the first node in the known nodes set.

Original pull request: #373.
2018-11-23 10:18:00 +01:00
Christoph Strobl
dc0ce19cd0 DATAREDIS-864 - Polishing.
Update Javadoc, remove unused code and fix some warnings.

Original Pull Request: #356
2018-11-22 10:50:09 +01:00
Mark Paluch
8858e0f1be DATAREDIS-864 - Leave XREAD COUNT unconfigured if not configured through builder.
XREAD does no longer apply a COUNT if the count was left unconfigured on StreamReadOperationsBuilder. This removes the limitation of batch size 1 and allows generally an increased throughput in default configuration.

Original Pull Request: #356
2018-11-22 10:49:27 +01:00
Mark Paluch
eafcb331d8 DATAREDIS-864 - Polishing.
Exract nested Stream types into connection.stream package. Extract common code from Template-API based toObjectRecord handling into StreamObjectMapper.

StreamReceiver and StreamMessageListenerContainer now can emit MapRecord or ObjectRecord for easier consumption of stream records.

Original Pull Request: #356
2018-11-22 10:49:06 +01:00
Christoph Strobl
13648d7c85 DATAREDIS-864 - Allow simple types to be added to Redis Stream.
Move API so the stream is more like the hash having dedicated serializers for fields and their values. Also allow appending simple types such as string directly to a stream without having to go through creating a Map. Those simple types can also be read back.
Provide means to hash complex objects when added to the stream.

Update Documentation.

Original Pull Request: #356
2018-11-22 10:48:16 +01:00
Mark Paluch
65754623f6 DATAREDIS-864 - Add support for Redis Streams.
We now support Redis Streams to add, read and consume stream records. We introduced StreamOperations, BoundStreamOperations, and ReactiveStreamOperations to interact with Redis Streams using imperative and reactive programming models. Record represents items within a stream. There are various flavors of Stream Records:

* MapRecord (maps to the hash body used in stream messages).
* Binary MapRecord: byte[] and ByteBuffer variants of MapRecord.
* ObjectRecord: Simple and Complex Objects mapped onto the stream body hash using ObjectHashMapper.

Redis Streams are supported for the Lettuce client only as Jedis has not received yet Redis Stream support.

Messages can be created as Map or as object:

redisTemplate.opsForStream().add("my-stream", Collections.singletonMap("key", "value"));

redisTemplate.opsForStream().add(ObjectRecord.create("my-logins", new LoginEvent(…)));

Streams can be consumed by using a StreamMessageListenerContainer that allows for stream subscriptions or a StreamReceiver.

Synchronous Message Listener:

StreamMessageListenerContainer<String, MapRecord<String, String, String>> container = StreamMessageListenerContainer
      .create(connectionFactory);
container.start();

Subscription subscription = container.receive(StreamOffset.fromStart("my-stream"), record -> … );

Reactive Message Receiver:

StreamReceiverOptions<String, ObjectRecord<String, LoginEvent>> receiverOptions = StreamReceiverOptions.builder()
      .targetType(LoginEvent.class).build();

StreamReceiver<String, ObjectRecord<String, LoginEvent>> receiver = StreamReceiver.create(connectionFactory, receiverOptions);

Flux<ObjectRecord<String, LoginEvent>> messages = receiver.receive(StreamOffset.fromStart("my-logins"));

Original Pull Request: #356
2018-11-22 10:46:21 +01:00
Mark Paluch
910e34067b DATAREDIS-875 - Polishing.
Reformat code.

Original pull request: #368.
2018-10-25 14:54:31 +02:00
Christoph Strobl
713a12bce9 DATAREDIS-875 - Omit MappingRedisConverter type hint for primitive type properties.
We now additionally check if the target property is a primitive type and do no longer add the type hint if so.

Original pull request: #368.
2018-10-25 14:53:34 +02:00
Mark Paluch
acd8b6bd4a DATAREDIS-872 - Polishing.
Create unit tests for RedisAtomic counter initialization. Refactor setIfAbsent(…) method to initializeIfAbsent() to not expose additional API methods.

Original pull request: #367.
2018-10-19 12:30:03 +02:00
ningwei
2d4fbc9aa0 DATAREDIS-872 - Fix race condition in RedisAtomic counters initialization.
We now use setIfAbsent to initialize RedisAtomic counters if no initial value was given. Using setIfAbsent turns the initialization into a single atomic step that prevents race conditions of the previously check and set method that required two Redis commands.

Previously, concurrent processes (threads, external changes to Redis) could set the initial value between the existence check and the value set operation that caused the last participant to win.

Original pull request: #367.
2018-10-19 12:27:33 +02:00
Mark Paluch
6132799353 DATAREDIS-881 - Polishing.
Add author tags. Reformat code. Javadoc, add tests.

Original pull request: #363.
2018-10-16 15:02:42 +02:00
Yanming Zhou
8e8861cbcd DATAREDIS-881 - Allow configuration of Lettuce's quiet shutdown period.
LettuceClientConfigurationBuilder now allows configuration of the quiet shutdown period to improve shutdown time of the Netty EventLoop when using non-shared ClientResources.

Original pull request: #363.
2018-10-16 15:00:32 +02:00
Mark Paluch
148b1ae582 DATAREDIS-874 - Polishing.
Reformat code. Add since tags. Extend tests.

Align Javadoc tonality across RedisAtomic… types.

Original pull request: #362.
2018-10-16 12:08:07 +02:00
Graham MacMaster
f2107ef81b DATAREDIS-874 - Implement accumulate/update methods on RedisAtomic[*] classes.
This commit adds the following public methods to RedisAtomicInteger,
RedisAtomicLong, and RedisAtomicDouble:

T accumulateAndGet(T updateValue, BinaryOperator<T> accumulatorFunction);
T getAndAccumulate(T updateValue, BinaryOperator<T> accumulatorFunction);
T updateAndGet(UnaryOperator<T> updateFunction);
T getAndUpdate(UnaryOperator<T> updateFunction);

These methods are primarily useful for doing CAS operations with the
help of Binary/UnaryOperators to generate the new value. They mirror
their counterparts on the AtomicInteger and AtomicLong classes
available in the java.util.concurrent.atomic package.

Original pull request: #362.
2018-10-16 12:08:07 +02:00
Christoph Strobl
45cbb21849 DATAREDIS-869 - Polishing.
Rename parameters and add methods with new nomenclature.

Original Pull Request: #355
2018-09-20 10:49:20 +02:00