The Lettuce team is delighted to announce general availability of Lettuce 6.2.
This is a massive release thanks to all the community contributions. Most notable changes
that ship with this release are:
- Support for Redis 7.0 commands and modifier/argument updates
Lettuce 6 supports Redis 2.6+ up to Redis 7.x. In terms of Java runtime, Lettuce requires
at least Java 8 and works with Java 18.
Thanks to all contributors who made Lettuce 6.2.0 possible.
📗 Links
- Reference documentation: https://lettuce.io/core/6.2.0.RELEASE/reference/
- Javadoc: https://lettuce.io/core/6.2.0.RELEASE/api/
⭐ New Features
- Allow configuring a default ThreadFactoryProvider to create ClientResources #1711
- Introduce API to allow for extending RedisClusterClient and its connections #1754
- Could not initialize JfrConnectionCreatedEvent #1767
- Add support for
double
timeouts forBZPOP
andBLPOP
/BRPOP
commands #1772 - Password Rotation support - Add a CredentialProvider interface/class and set your own provider #1774
- Emit command latency events using JFR #1820
- Lettuce loosing clientTracking after Reconnect #1838
- NodeSelection
dispatch
output gets reused #1876 - Specify concrete scheduler name #1898
- Add support for
SINTERCARD
#1902 - Add support for
LMPOP
andBLMPOP
commands #1903 - Add support for
CLUSTER DELSLOTSRANGE
andCLUSTER ADDSLOTSRANGE
commands #1904 - Add NX/XX/GT/LT options to
EXPIRE
commands #1905 - Avoid routing to cluster replicas that are loading data #1923
- Introduce
nodeFilter
Predicate
to filterPartitions
#1942 - Add exception type for
READONLY
errors #1943 - Add support for
ZINTERCARD
command #1982 - Add support
NOW
,FORCE
andABORT
args forSHUTDOWN
command #1985 - Add support for EVAL_RO and EVALSHA_RO commands #1987
- Support
CONFIG GET/SET
with multiple parameters #1988 - Add support for CLIENT NO-EVICT command #1989
- Add support for ACL DRYRUN command #1992
- Do not use pause detector for
CommandLatencyCollector
by default #1995 - Rename
ReadFrom.NEAREST
toLOWEST_LATENCY
to clarify its functionality #1997 - Add support for
REPLICAOF
andCLUSTER REPLICAS
commands #2020 - Add support for
CLUSTER SHARDS
command #2025 - Deprecate connection-related methods on commands API #2028
- Promote
AsyncCloseable
to public API #2030 - Improving performance of RedisAdvancedClusterAsyncCommandsImpl::mget #2042
- Redis cluster refresh of large clusters keeps I/O threads busy #2045
- Reduces overhead of RedisClusterNode.forEachSlot #2058
- Implement
AutoCloseable
inAbstractRedisClient
#2076 - StatefulRedisClusterConnectionImpl getConnection always calls connection provider with Intent.WRITE #2095
- Add support for
XGROUP … ENTRIESREAD
#2141 - Add support for
EXPIRETIME
andPEXPIRETIME
#2142 - Assert Redis 7.0 compatibility #2143
- Add support for
SENTINEL REPLICAS
command #2144 - Add support for
SORT_RO
#2145
🐞 Bug Fixes
- Fix potential null-dereference in CommandHandler #1703
- Cannot refresh Redis Cluster topology #1706
RedisPubSubCommands
,RedisClusterPubSubCommands
, and other types missing inreflect-config.json
#1710- Additional Redis PubSub types missing from reflect-config.json #1737
- AbstractRedisClient#shutdown() never ends when Redis is unstable #1768
- Closing ClusterNodeEndpoint asynchronously doesn't retrigger buffered commands #1769
- CopyArgs should honor replace parameter value instead of doing null check only #1777
- Exception thrown during RedisClusterClient shutdown #1800
- SSL CN name checked failed after Redis Sentinel failover #1812
ClassCastException
when noLATENCY_UTILS_AVAILABLE
orHDR_UTILS_AVAILABLE
#1829- Static command interface methods are erroneously verified against command names #1833
- Coroutine commands that result in a
Flow
can hang #1837 - Fix
ACL SETUSER
when adding specified categories #1839 - Fix
ACL SETUSER
when setting noCommands #1846 ACL SETUSER
not retaining argument order #1847- io.lettuce.core.protocol.CommandExpiryWriter cannot be cast to io.lettuce.core.protocol.DefaultEndpoint #1882
- Attempting to execute commands during a JVM shutdown will cause a RedisConnectionFailureException / IllegalStateException: Shutdown in progress #1883
- Tracing incorrect when command execute timeout #1901
- Run flush commands with
FlushMode
on upstreams only #1908 RoundRobinSocketAddressSupplier
is not refreshing whenRedisURI
changes #1909ClientResources.mutate()
leads toDefaultClientResources was not shut down properly
if the original instance is GC'd #1917BoundedPoolConfig
with-1
asmaxTotal
does not work as unlimited pool #1953CommandArgs
usingLong.MIN_VALUE
results in0
#2019SslClosedEngineException
thrown after exceeding connection init timeout #2023NodeTopologyView
passes null-Value toStringReader
constructor #2035MasterReplicaConnectionProvider
with zero connections causesIllegalArgumentException
#2036DefaultCommandLatencyCollector.PauseDetectorWrapper
definesPauseDetector
in method signatures #2056- decorrelatedJitter and fullJitter delay calculation overflows #2115
- XPending command cannot be called with IDLE param without defining CONSUMER #2132
- Routing XREADGROUP command in Redis cluster #2140
- Ensure
PooledClusterConnectionProvider
uses correct write-connection #2146 - CommandHandler's validateWrite method has a calculated overflow problem #2150
💡 Other
- Edit wiki for versioned pages #1699
- RedisURI: improve deprecation notice in withPassword() #1707
- Improve kotlin api generator to provide replacement for a deprecated method #1759
- cancelCommandsOnReconnectFailure should have appropriate warnings. #1787
- Upgrade to
netty-incubator-transport-native-io_uring
0.0.8.Final
#1798 - Upgrade to Reactor 3.4 #1804
- Upgrade to Commons Pool 2.10.0 #1805
- Upgrade to Micrometer 1.7 #1806
- Upgrade to Kotlin 1.5 #1807
- Dependency upgrades #1808
- Fixed obvious typo in MicrometerOptions.Builder.minLatency(Duration) #1826
- Upgrade dependencies #1853
- Upgrade build to Java 17 #1854
- Deprecate
AbstractRedisClient.setDefaultTimeout(…)
to avoid ambiguity withRedisURI.getTimeout()
#1868 - Replace reactor's deprecated API #1885
- A question about the letuce CI project view #1914
- Bump log4j-core to 2.15.0 #1934
- Upgrade log4j to 2.17 to address CVE-2021-45105 #1941
- Extend copyright license years to 2022 #1952
RedisCoroutinesCommands
calls are locked after calling multi() #1954- Add tests for Sentinel with ACL authentication #1956
- Fix Javadoc link in README #1959
- Upgrade dependencies #1962
- Docs have some minor spacing and grammar issues #1993
- Fix a little typo #2003
- Use HTTPS for links #2026
- Separate profile to support m1 chip #2043
- Bump netty to fix vulnerability issue #2098
- Move off deprecated
DirectProcessor
API #2136 - Upgrade to Netty 4.1.79.Final #2153
- Upgrade to Micrometer 1.9.2 #2154
- Upgrade to Reactor 3.4.21 #2155
- Upgrade to Reactive Streams 1.0.4 #2156
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
- @180254
- @Alfagun74
- @HashZhang
- @JGulbronson
- @RohanNagar
- @Shoothzj
- @Yanam
- @aashishamrute
- @adiamzn
- @andreas-trvlk
- @anothertobi
- @be-hase
- @btthorstenwitt
- @christophstrobl
- @cjs1992-github
- @craftmaster2190
- @dengliming
- @domi-nika60
- @eleftherias
- @fedigiorgio
- @gkorland
- @hebelala
- @henry701
- @ikeyat
- @jay-june
- @jdeppe-pivotal
- @jhmartin
- @jord1e
- @jruaux
- @kgrits
- @langchristian96
- @lianghuang
- @m-ibot
- @mattfff
- @mikeamzn
- @mvdobrinin
- @napstr
- @oridool
- @pablotp
- @pedrovilasboas
- @perlun
- @sinrimin
- @sokomishalov
- @stillerrr
- @tawAsh1
- @theArtechnology
- @travispeloton
- @wbzj1110