Given addListener(:MessageListener, :Collection<Topic>) could be called concurrently from the addMessageListener(:MessageListener, Collection<Topic>) method by multiple Threads, and the RedisMessageListenerContainer Javadoc specifically states that it is safe to call the addMessageListener(..) method conurrently without any external synchronization, and the registeration (or mapping) of listener to Topics is a componund action, then a race condition is possible.
Closes#2755
We now correctly apply if exists/if not exists constraints on the reactive zadd command.
Previously, we only considered upsert which wasn't sufficient to apply xx/nx.
Closes#2731
Replace qualified class name access of inner classes with simple names and imports.
Remove Java 8 guards. Extend supported temporal types in Jsr310Converters. Remove superfluous converter annotations.
Simplify tests.
See #2677
Original pull request: #2681
We now appropriately handle OffsetDateTime and OffsetTime the same as all other java.time types, supported as simple types on Spring application (persistent) entity classes.
Closes#2677
Make fields final where possible. Reintroduce end of line comment markers to avoid reformatting into unreadable format. Replace HashSet per command instance with String to reduce memory footprint.
Tweak Javadoc wording to represent what we actually expect. Reorder methods.
See #2640
Original pull request: #2644
We now use directly JedisCluster methods instead of using our command executor routing as JedisCluster exposes the methods and we no longer require our own command routing.
Closes#2589
Now it is possible to construct a new, custom default RedisCacheConfiguration from an existing, default RedisCacheConfiguration.
This is useful in a Spring Boot context using the RedisCacheManagerBuilderCustomizer and acquiring access to the default RedisCacheConfiguration, which likely originated from Spring Boot Redis CacheProperties.
Resolves#2583
Reuse condition objects in command and version condition extensions.
Shut down ClientResources via ShutdownQueue and ensure shared client resources usage.
Add close support to our MethodArgumentsProvider. Reuse LettuceTestClientConfiguration for test client config settings.
Closes#2575
Delegate RedisClientProvider.getClient() across connection providers. Use SimpleAsyncTaskExecutor as default in ClusterCommandExecutor to avoid ThreadPoolTaskExecutor pollution.
See #2575