LettuceStreamCommands.xRevRange converts Ranges with a StringCodec that produces Boundary<ByteBuffer>, while Lettuce expects the range's Boundary to include strings. The conversion worked well only in cases where the Range was unbounded (- or +), and failed with ClassCastException on the consuming site for other cases.
Original pull request: #556
rename(…) behavior in cluster-mode is now aligned with standalone Redis behavior that overwrites the target key if it already exists and the renamed key uses a different slot. Previously, the underlying restore command was called without the replace option which caused BUSYKEY failures.
Original Pull Request: #555
We now translate consistently connection/pooling exceptions in LettuceConnectionFactory by wrapping LettuceConnectionProvider with a variant that considers exception translation.
doPUnsubscribe(…) and doUnsubscribe(…) now consider the all flag to unsubscribe from all subscribed patterns/channels. Previously, both methods didn't consider all and were invoked with an empty byte array which unsubscribed from an empty pattern/channel name and left subscriptions active.
Original Pull Request: #549
It is now possible to hand a plain list to the converter that is then converted into a hash structure using index numbers as keys.
Original pull request: #546.
Tweak documentation wording. Remove trailing whitespaces. Remove unused methods. Improve method names. Return zero stats when stats do not get collected.
Original Pull Request: #545
We now expose CacheStatistics for RedisCache. Each cache tracks its statistics (retrievals, hits, misses, stores, removals, lock wait) locally. CacheStatistics is exposed through RedisCacheWriter to allow for statistics customization depending on the cache writer strategy. The statistic object is a singleton per cache instance that gets updated with as the cache operates.
RedisCache cache = …;
CacheStatistics statistics = cache.getStatistics();
statistics.getRetrievals();
statistics.getHits();
Original Pull Request: #545
Set MKSTREAM by default when calling createGroup on the operations API as that should be the default behavior in the first place. Reformat code. Add since tags.
Original pull request: #527.
We now correctly check if a BLOCK option is configured using a timeout of zero or higher. Previously we only checked if the configured value is greater than zero and didn't consider that a timeout of zero blocks indefinitely.
Original Pull Request: #528
Replace condition-based polling/waiting with Awaitility. Improve assertions for timing-based checks. Increase number of HyperLogLog samples to reduce probability of clashing elements.
Remove long-waiting sleeps that did not lead to an assertion.
Original Pull Request: #525
Rename PendingMessage.getStringId to PendingMessage.getIdAsString for consistent naming scheme. Remove getElapsedTimeSinceLastDeliveryMS method for now in favor of getElapsedTimeSinceLastDelivery.
Use primitive long instead of boxed wrapper to avoid nullability where possible. Move PendingMessage* converters to StreamConverters.
Add assertions.
Original pull request: #512.
We now allow customization of flushing when using pipelining with Lettuce. Lettuce flushes each command by default. To optimize for performance, flushing behavior can be customized using a PipeliningFlushPolicy. Flush each command, flush on close and flush after n commands are the bundled implementations that can be configured on LettuceConnectionFactory.
Original Pull Request: #511