diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 55194335a..7783b1329 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to Lettuce -Lettuce is released under the Apache 2.0 license. If you would like to contribute something, or simply want to hack on the code this document should help you get started. +Lettuce is released under the MIT license. If you would like to contribute something, or simply want to hack on the code this document should help you get started. ## Code of Conduct diff --git a/.github/wordlist.txt b/.github/wordlist.txt index 97da8e418..f51a8a92c 100644 --- a/.github/wordlist.txt +++ b/.github/wordlist.txt @@ -251,3 +251,5 @@ unix uring whitespace xml +RedisJSON +MkDocs \ No newline at end of file diff --git a/README.md b/README.md index 2dbf4eb03..8358a1538 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ Lettuce - Advanced Java Redis client =============================== - [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.lettuce/lettuce-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.lettuce/lettuce-core) - [![Javadocs](https://www.javadoc.io/badge/io.lettuce/lettuce-core.svg)](https://www.javadoc.io/doc/io.lettuce/lettuce-core) - [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) [![Integration](https://github.com/redis/lettuce/actions/workflows/integration.yml/badge.svg?branch=main)](https://github.com/redis/lettuce/actions/workflows/integration.yml) [![codecov](https://codecov.io/gh/redis/lettuce/branch/main/graph/badge.svg?token=pAstxAAjYo)](https://codecov.io/gh/redis/lettuce) - [![Discord](https://img.shields.io/discord/697882427875393627?style=flat-square)](https://discord.gg/redis) + [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) + [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.lettuce/lettuce-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.lettuce/lettuce-core) + [![Javadocs](https://www.javadoc.io/badge/io.lettuce/lettuce-core.svg)](https://www.javadoc.io/doc/io.lettuce/lettuce-core) + +[![Discord](https://img.shields.io/discord/697882427875393627.svg?style=social&logo=discord)](https://discord.gg/redis) +[![Twitch](https://img.shields.io/twitch/status/redisinc?style=social)](https://www.twitch.tv/redisinc) +[![YouTube](https://img.shields.io/youtube/channel/views/UCD78lHSwYqMlyetR0_P4Vig?style=social)](https://www.youtube.com/redisinc) +[![Twitter](https://img.shields.io/twitter/follow/redisinc?style=social)](https://twitter.com/redisinc) Lettuce is a scalable thread-safe Redis client for synchronous, asynchronous and reactive usage. Multiple threads may share one connection if they avoid blocking and transactional @@ -43,16 +47,6 @@ See the [reference documentation](https://redis.github.io/lettuce/) and [API Ref [Work at Redis](https://redis.com/company/careers/jobs/) -Communication ---------------- - -* [GitHub Discussions](https://github.com/redis/lettuce/discussions) (Q&A, Ideas, General discussion) -* Stack Overflow (Questions): [https://stackoverflow.com/questions/tagged/lettuce](https://stackoverflow.com/questions/tagged/lettuce) -* Discord: [![Discord](https://img.shields.io/discord/697882427875393627.svg?style=social&logo=discord)](https://discord.gg/redis) -* Twitter: [![Twitter](https://img.shields.io/twitter/follow/redisinc?style=social)](https://twitter.com/redisinc) -* [GitHub Issues](https://github.com/redis/lettuce/issues) (Bug reports, feature requests) - - Documentation --------------- diff --git a/docs/new-features.md b/docs/new-features.md index 5b02a9853..c67cd1089 100644 --- a/docs/new-features.md +++ b/docs/new-features.md @@ -1,5 +1,12 @@ # New & Noteworthy +## What’s new in Lettuce 6.5 + +- [RedisJSON support](user-guide/redis-json.md) through `RedisJSONCommands` and the respective reactive, async and Kotlin APIs +- Complete support for all `CLUSTER` commands (added `CLUSTER MYSHARDID` and `CLUSTER LINKS`) +- Added support for the `CLIENT TRACKING` command +- Migrated the documentation to [MkDocs](https://www.mkdocs.org/) + ## What’s new in Lettuce 6.4 - [Hash Field Expiration](https://redis.io/docs/latest/develop/data-types/hashes/#field-expiration) is now fully supported diff --git a/src/main/java/io/lettuce/core/json/README.md b/docs/user-guide/redis-json.md similarity index 100% rename from src/main/java/io/lettuce/core/json/README.md rename to docs/user-guide/redis-json.md diff --git a/src/main/java/io/lettuce/core/api/reactive/RedisHashReactiveCommands.java b/src/main/java/io/lettuce/core/api/reactive/RedisHashReactiveCommands.java index c0bc9f073..99d60e705 100644 --- a/src/main/java/io/lettuce/core/api/reactive/RedisHashReactiveCommands.java +++ b/src/main/java/io/lettuce/core/api/reactive/RedisHashReactiveCommands.java @@ -314,7 +314,7 @@ public interface RedisHashReactiveCommands { * @param channel streaming channel that receives a call for every key. * @param key the key. * @return StreamScanCursor scan cursor. - * @deprecated since 7.0 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by + * @deprecated since 6.4 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by * {@link #hscanNovalues}. */ @Deprecated @@ -340,7 +340,7 @@ public interface RedisHashReactiveCommands { * @param key the key. * @param scanArgs scan arguments. * @return StreamScanCursor scan cursor. - * @deprecated since 7.0 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by + * @deprecated since 6.4 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by * {@link #hscanNovalues}. */ @Deprecated @@ -368,7 +368,7 @@ public interface RedisHashReactiveCommands { * @param scanCursor cursor to resume from a previous scan, must not be {@code null}. * @param scanArgs scan arguments. * @return StreamScanCursor scan cursor. - * @deprecated since 7.0 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by + * @deprecated since 6.4 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by * {@link #hscanNovalues}. */ @Deprecated @@ -394,7 +394,7 @@ public interface RedisHashReactiveCommands { * @param key the key. * @param scanCursor cursor to resume from a previous scan, must not be {@code null}. * @return StreamScanCursor scan cursor. - * @deprecated since 7.0 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by + * @deprecated since 6.4 in favor of consuming large results through the {@link org.reactivestreams.Publisher} returned by * {@link #hscanNovalues}. */ @Deprecated diff --git a/src/main/kotlin/io/lettuce/core/ScanFlow.kt b/src/main/kotlin/io/lettuce/core/ScanFlow.kt index 7cc560fb6..0c8853df5 100644 --- a/src/main/kotlin/io/lettuce/core/ScanFlow.kt +++ b/src/main/kotlin/io/lettuce/core/ScanFlow.kt @@ -82,7 +82,7 @@ object ScanFlow { * @param key the key. * @param scanArgs scan arguments. * @return `Flow>` flow of key-values. - * @since 7.0 + * @since 6.4 */ fun hscanNovalues(commands: RedisHashCoroutinesCommands, key: K, scanArgs: ScanArgs? = null): Flow { val ops = when (commands) { diff --git a/src/main/kotlin/io/lettuce/core/api/coroutines/BaseRedisCoroutinesCommands.kt b/src/main/kotlin/io/lettuce/core/api/coroutines/BaseRedisCoroutinesCommands.kt index df829da7b..475a9f81b 100644 --- a/src/main/kotlin/io/lettuce/core/api/coroutines/BaseRedisCoroutinesCommands.kt +++ b/src/main/kotlin/io/lettuce/core/api/coroutines/BaseRedisCoroutinesCommands.kt @@ -91,7 +91,7 @@ interface BaseRedisCoroutinesCommands { * * @param shardChannels channel keys. * @return array-reply a list of channels and number of subscribers for every channel. - * @since 7.0 + * @since 6.4 */ suspend fun pubsubShardNumsub(vararg shardChannels: K): Map? @@ -108,7 +108,7 @@ interface BaseRedisCoroutinesCommands { * @param shardChannel the shard channel type: key. * @param message the message type: value. * @return Long integer-reply the number of clients that received the message. - * @since 7.0 + * @since 6.4 */ suspend fun spublish(shardChannel: K, message: V): Long? diff --git a/src/main/kotlin/io/lettuce/core/api/coroutines/RedisHashCoroutinesCommands.kt b/src/main/kotlin/io/lettuce/core/api/coroutines/RedisHashCoroutinesCommands.kt index 99c330a35..3bee6f59b 100644 --- a/src/main/kotlin/io/lettuce/core/api/coroutines/RedisHashCoroutinesCommands.kt +++ b/src/main/kotlin/io/lettuce/core/api/coroutines/RedisHashCoroutinesCommands.kt @@ -190,7 +190,7 @@ interface RedisHashCoroutinesCommands { * * @param key the key. * @return KeyScanCursor key scan cursor. - * @since 7.0 + * @since 6.4 */ suspend fun hscanNovalues(key: K): KeyScanCursor? @@ -209,7 +209,7 @@ interface RedisHashCoroutinesCommands { * @param key the key. * @param scanArgs scan arguments. * @return KeyScanCursor key scan cursor. - * @since 7.0 + * @since 6.4 */ suspend fun hscanNovalues(key: K, scanArgs: ScanArgs): KeyScanCursor? @@ -230,7 +230,7 @@ interface RedisHashCoroutinesCommands { * @param scanCursor cursor to resume from a previous scan, must not be `null`. * @param scanArgs scan arguments. * @return KeyScanCursor key scan cursor. - * @since 7.0 + * @since 6.4 */ suspend fun hscanNovalues(key: K, scanCursor: ScanCursor, scanArgs: ScanArgs): KeyScanCursor? @@ -249,7 +249,7 @@ interface RedisHashCoroutinesCommands { * @param key the key. * @param scanCursor cursor to resume from a previous scan, must not be `null`. * @return KeyScanCursor key scan cursor. - * @since 7.0 + * @since 6.4 */ suspend fun hscanNovalues(key: K, scanCursor: ScanCursor): KeyScanCursor? @@ -317,7 +317,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpire(key: K, seconds: Long, vararg fields: K): List @@ -332,7 +332,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpire(key: K, seconds: Long, expireArgs: ExpireArgs, vararg fields: K): List @@ -346,7 +346,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpire(key: K, seconds: Duration, vararg fields: K): List @@ -361,7 +361,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpire(key: K, seconds: Duration, expireArgs: ExpireArgs, vararg fields: K): List @@ -375,7 +375,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Long, vararg fields: K): List @@ -390,7 +390,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Long, expireArgs: ExpireArgs, vararg fields: K): List @@ -404,7 +404,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Date, vararg fields: K): List @@ -419,7 +419,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Date, expireArgs: ExpireArgs, vararg fields: K): List @@ -433,7 +433,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Instant, vararg fields: K): List @@ -448,7 +448,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpireat(key: K, timestamp: Instant, expireArgs: ExpireArgs, vararg fields: K): List @@ -459,7 +459,7 @@ interface RedisHashCoroutinesCommands { * @param fields one or more fields to get the TTL for. * @return a list of [Long] values for each of the fields provided: expiration time as a UNIX timestamp in seconds; * `-1` indicating the field has no expiry time set; `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hexpiretime(key: K, vararg fields: K): List @@ -470,7 +470,7 @@ interface RedisHashCoroutinesCommands { * @param fields one or more fields to remove the TTL for. * @return a list of [Long] values for each of the fields provided: `1` indicating expiration time is removed; * `-1` field has no expiration time to be removed; `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpersist(key: K, vararg fields: K): List @@ -484,7 +484,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpire(key: K, milliseconds: Long, vararg fields: K): List @@ -499,7 +499,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpire(key: K, milliseconds: Long, expireArgs: ExpireArgs, vararg fields: K): List @@ -513,7 +513,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpire(key: K, milliseconds: Duration, vararg fields: K): List @@ -528,7 +528,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is 0; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpire(key: K, milliseconds: Duration, expireArgs: ExpireArgs, vararg fields: K): List @@ -542,7 +542,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Long, vararg fields: K): List @@ -557,7 +557,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Long, expireArgs: ExpireArgs, vararg fields: K): List @@ -571,7 +571,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Date, vararg fields: K): List @@ -586,7 +586,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Date, expireArgs: ExpireArgs, vararg fields: K): List @@ -600,7 +600,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Instant, vararg fields: K): List @@ -615,7 +615,7 @@ interface RedisHashCoroutinesCommands { * already due to expiration, or provided expriry interval is in the past; `1` indicating expiration time is * set/updated; `0` indicating the expiration time is not set (a provided NX | XX | GT | LT condition is not * met); `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpireat(key: K, timestamp: Instant, expireArgs: ExpireArgs, vararg fields: K): List @@ -626,7 +626,7 @@ interface RedisHashCoroutinesCommands { * @param fields one or more fields to get the TTL for. * @return a list of [Long] values for each of the fields provided: expiration time as a UNIX timestamp in milliseconds; * `-1` indicating the field has no expiry time set; `-2` indicating there is no such field - * @since 7.0 + * @since 6.4 */ suspend fun hpexpiretime(key: K, vararg fields: K): List @@ -638,7 +638,7 @@ interface RedisHashCoroutinesCommands { * @return a list of [Long] values for each of the fields provided: the time to live in seconds; or a negative value in * order to signal an error. The command returns `-1` if the key exists but has no associated expiration time. * The command returns `-2` if the key does not exist. - * @since 7.0 + * @since 6.4 */ suspend fun httl(key: K, vararg fields: K): List @@ -650,7 +650,7 @@ interface RedisHashCoroutinesCommands { * @return a list of [Long] values for each of the fields provided: the time to live in milliseconds; or a negative * value in order to signal an error. The command returns `-1` if the key exists but has no associated * expiration time. The command returns `-2` if the key does not exist. - * @since 7.0 + * @since 6.4 */ suspend fun hpttl(key: K, vararg fields: K): List diff --git a/src/main/kotlin/io/lettuce/core/api/coroutines/RedisScriptingCoroutinesCommands.kt b/src/main/kotlin/io/lettuce/core/api/coroutines/RedisScriptingCoroutinesCommands.kt index 711e7569b..8b0d4a0aa 100644 --- a/src/main/kotlin/io/lettuce/core/api/coroutines/RedisScriptingCoroutinesCommands.kt +++ b/src/main/kotlin/io/lettuce/core/api/coroutines/RedisScriptingCoroutinesCommands.kt @@ -94,7 +94,7 @@ interface RedisScriptingCoroutinesCommands { * @param values the values. * @param expected return type. * @return script result. - * @since 7.0 + * @since 6.4 */ suspend fun evalReadOnly( script: String, diff --git a/src/main/resources/META-INF/LICENSE b/src/main/resources/META-INF/LICENSE index 62589edd1..7e01d712b 100644 --- a/src/main/resources/META-INF/LICENSE +++ b/src/main/resources/META-INF/LICENSE @@ -1,202 +1,21 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +MIT License + +Copyright (c) 2023-Present, Redis Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/src/main/resources/META-INF/NOTICE b/src/main/resources/META-INF/NOTICE deleted file mode 100644 index ffffbcdf6..000000000 --- a/src/main/resources/META-INF/NOTICE +++ /dev/null @@ -1,11 +0,0 @@ -Lettuce Java Redis Client ${version} -Copyright (c) 2011-2020 Mark Paluch - -This product is licensed to you under the Apache License, Version 2.0 -(the "License"). You may not use this product except in compliance with -the License. - -This product may include a number of subcomponents with separate -copyright notices and license terms. Your use of the source code for -these subcomponents is subject to the terms and conditions of the -subcomponent's license, as noted in the license file.