When shareNativeConnection was set to false and enabled connection pooling before executing each Redis command, select dbIndex command was executed. Selecting the database can be superfluous when the connection already uses the right database index.
Original pull request: #496.
Remove data node password reuse for sentinel as we favor explicit configuration over implicit.
Use RedisURI builder and not sentinel URI builder to configure the SentinelURI correctly.
Associate masterId with outermost RedisURI.
Original pull request: #495.
We now expose two separate properties in RedisSentinelConfiguration to configure the data password individually from the sentinel password.
Original pull request: #495.
We now apply the password to all Sentinel endpoints described through RedisURI.
We also apply all remaining settings to all Sentinel endpoints to ensure configuration propagation.
Original Pull Request: #490
Empty Strings changed to be considered null throwing an exception on getRequiredAttribute so we now set the value explicitly for this attribute when considered empty.
Original pull request: #491.
Cleanup publishers are now subscribed to instead of setting the subscribeOn Scheduler to ensure connections get closed after canceling the stream.
Original Pull Request: #488
Previously it was possible in multi-threaded environment to:
* get a `null` from `opsFor*` methods in RedisTemplate.
* fail with a `NullPointerException` when working with a not-`null` reference returned from `RedisTemplate.opsFor*` methods.
Introduced changes initialize the fields eagerly to avoid visibility issues when accessing them and add a `final` modifier to the `AbstractOperations#template` field.
Original pull request: #479.
Add early return in cache key is a String. Convert convertCollectionLikeOrMapKey to non-nullable method by throwing an exception on a non-collection-like and Map-like type.
Original pull request: #475.
We now invoke the correct PEXPIRE(AT) command. Previously, we invoked EXPIRE/EXPIREAT commands resulting in the wrong command being called.
Original Pull Request: #474
Consistently use getClientName() instead of qualified configuration accessor. Add missing Nullable annotation to getPassword() method. Reformat.
Original pull request: #472.
LettuceConnectionFactory.destroy() now disposes also the reactive LettuceConnectionProvider to free resources of a connection pool.
Original Pull Request: #470
We now use the correct generic parameters for raw serialization via RedisSerializationContext returning ByteBuffer.
Introduce RedisSerializer.raw() and cleanups.
Original Pull Request: #459
The AsArrayTypeDeserializer causes date values to be rendered as an array like [java.util.Date, 1561543964015] an therefore is 1. skipped when flattening and 2. if not skipped cannot be read back.
We now register an error handler along with a custom deserializer aware of the used date format to write and read date values without having to store an array but just the date msec.
Original pull request: #467.
LettuceConnection, LettuceClusterConnection, and LettuceSubscription can now be properly subclassed so they can be extended and created by LettuceConnectionFactory.
LettuceConnectionFactory provides template methods doCreateLettuceConnection and doCreateLettuceClusterConnection.
Original pull request: #450 & #457
We now appropriately set SSL configuration when using the Lettuce driver with Redis Sentinel to enable Sentinel usage with SSL. Using Sentinel with SSL requires Lettuce 5.2 or newer.
Original Pull Request: #462
We now consider RedisTemplate's enableTransactionSupport configuration when releasing connections. Previously, we released bound connections when being in a read-only transaction regardless the configuration in RedisTemplate. This broke session callbacks that expected to remain on the same connection all but the first command were executed on a different connection.
Releasing a connection now no longer unbinds a connection if transaction support is disabled.
Original Pull Request: #453
We now check on connection release whether a connection is in MULTI state. If so, then we discard (rollback) the transaction to reset the connection to a fresh state.
Original Pull Request: #453
We now use Flux.usingWhen() to apply functions on reactive Redis connections and to release connections calling non-blocking methods.
Original Pull Request: #461