LettuceConnection.switchToPubSub now correctly releases its underlying connection when switching to Pub/Sub. Also, we improved safeguards to avoid using closed connections.
Closes#2331
We now close the cluster command executor before cleaning up the connection pools so that we first release all held connections before pruning the connection pools.
Previously, the pools were pruned first leading to an attempt to return the connection held by the cluster command executor causing a PoolException.
Closes#2330
Consistently use InvalidDataAccessApiUsageException to signal that an operation is not allowed/supported in the current mode of operation.
Replace converter objects with conversion within the actual method to remove indirections.
Original Pull Request: #2287
We now try to eagerly apply a custom converter when reading Redis properties in the MappingRedisConverter before considering type hints from the hash.
We require type hints to properly restore the target type for a hash entry as Redis data is all byte arrays, so a simple String needs a type hint before we can load it back into an e.g. Object-typed property. Subtypes of properties (such as ZoneRegion for ZoneId) are sometimes not associated with a converter as only the parent type (ZoneId) is associated with a converter. Trying to convert the value into the subtype directly through our ConversionService would fail in that case.
Closes#2307
Currently, `RedisOperations#convertAndSend` is void event though the underlying `RedisPubSubCommands#publish` returns a `Long` that represents the number of clients receiving the published message (see https://redis.io/commands/publish).
This commit updates `RedisOperations#convertAndSend` to return the number of clients that received the message.
Closes#2209
Original pull request: #2225.
DefaultedRedis…Connection is now deprecated to help with migration towards segregated/commands interface usage. The connection now exposes a commands() object providing access to RedisCommands so that a composite commands object can be accessed independently from the connection.
Redis…Commands provider represent entry points to obtain segregated command interfaces.
See: #2273
Original Pull Request: #2276
StreamInfo subtypes now implement Streamable. Switch from stream mapping to for/each style to avoid Java Stream creation.
Introduce getRequired(…) methods to improve nullability experience.
Original Pull Request: #2276
The API exposes now the renamed command terminology (replica) only and no longer the deprecated one.
Closes: #2195
See: #2274
Original Pull Request: #2276
Update since tags. Move FlushOption converters to client-specific converters. Use method-references where possible.
See #2187
Original pull request: #2190.
Add support for MINID trimming. Add tests. Extract Jedis XAddParams conversion to StreamConverters.
Reorder methods. Simplify StreamRecord creation.
See #2247
Add since tags. Consistently document scan command with try-with-resources guidance. Use try-with-resources in tests.
See #2260
Original pull request: #2263.
Allow Jedis to exist pub/sub loop gracefully. Await unsubscribe. Reduce retry backoff to allow from broken connection recovery. Do not use pooling to avoid using broken connections.
See #2256
RedisMessageListenerContainer is now reimplemented using non-blocking synchronization guards and a state management to simplify its maintenances. Additionally, listener registration and subscription setup through the start() method awaits until the listener subscription is confirmed by the Redis server. The synchronization removes potential race conditions that could happen by concurrent access to blocking Redis connectors in which the registration state was guessed and not awaited.
Resolves: #964
Original Pull Request: #2256