diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3bfc3d7f81..29725b0d5b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -202,13 +202,14 @@ jobs: then versioned_builds=($(find . -type d -regex ".*[0-9-]" -maxdepth 1 | sed -E 's/^.\///')) for versioned_build in "${versioned_builds[@]}"; do - product=$(awk 'BEGIN{FS=OFS="-"}{NF--; print}' <<< $versioned_build) + read product version <<< "$(awk -F- '{print $1 " " $2}' <<<"$versioned_build")" + if [[ "${product}" == "redis-data-integration" ]]; then gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/${versioned_build}/integrate/${product}" - gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/docs/${versioned_build}/integrate/${product}" + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/integrate/${product}/${version}" else gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${versioned_build}/operate/${product}" - gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/docs/${versioned_build}/operate/${product}" + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/operate/${product}/${version}" fi done fi diff --git a/.gitignore b/.gitignore index 6c08a9501f..e26c81b832 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ /data/versions.json /data/components_local/ /examples -build/components/__pycache__/ +**/__pycache__/ venv/** node_modules/ package-lock.json diff --git a/assets/css/index.css b/assets/css/index.css index cb4b11bf18..f91f8f6f3d 100644 --- a/assets/css/index.css +++ b/assets/css/index.css @@ -521,6 +521,41 @@ select { @apply w-10 h-10; } +/* YAML embed download button styles */ +.download-yaml-btn { + @apply transition-colors; +} + +.download-yaml-btn:disabled { + @apply opacity-75 cursor-not-allowed; +} + +.download-yaml-btn svg { + @apply w-4 h-4; +} + +/* Make long code blocks scrollable */ +.yaml-embed-container .highlight { + max-height: 800px; + overflow-y: auto; +} + +.yaml-embed-container .highlight::-webkit-scrollbar { + width: 8px; +} + +.yaml-embed-container .highlight::-webkit-scrollbar-track { + @apply bg-slate-700 rounded; +} + +.yaml-embed-container .highlight::-webkit-scrollbar-thumb { + @apply bg-slate-500 rounded; +} + +.yaml-embed-container .highlight::-webkit-scrollbar-thumb:hover { + @apply bg-slate-400; +} + #download-redis > h3, #download-redis-stack > h3 { @apply mt-2; diff --git a/build/local_examples.py b/build/local_examples.py new file mode 100644 index 0000000000..20ac1dd2f0 --- /dev/null +++ b/build/local_examples.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 +""" +Local Examples Processor + +This script processes local examples from the local_examples/ directory +and integrates them into the existing examples system. + +Works like remote examples - each file contains an EXAMPLE: header +and can be any supported language. +""" + +import os +import glob +import shutil +import logging +from typing import Dict, Any + +from components.example import Example +from components.util import mkdir_p +from components.structured_data import load_dict, dump_dict + + +# File extension to language mapping +EXTENSION_TO_LANGUAGE = { + '.py': 'python', + '.js': 'node.js', + '.go': 'go', + '.cs': 'c#', + '.java': 'java', + '.php': 'php' +} + +# Language to client name mapping (from config.toml clientsExamples) +LANGUAGE_TO_CLIENT = { + 'python': 'Python', + 'node.js': 'Node.js', + 'go': 'Go', + 'c#': 'C#', + 'java': 'Java-Sync', # Default to sync, could be overridden + 'php': 'PHP', + 'redisvl': 'RedisVL' +} + + +def get_language_from_extension(filename: str) -> str: + """Get language from file extension.""" + _, ext = os.path.splitext(filename) + return EXTENSION_TO_LANGUAGE.get(ext.lower()) + + +def get_client_name_from_language(language: str) -> str: + """Get client name from language.""" + return LANGUAGE_TO_CLIENT.get(language, language.title()) + + +def get_example_id_from_file(path: str) -> str: + """Extract example ID from the first line of a file.""" + try: + with open(path, 'r') as f: + first_line = f.readline().strip() + if 'EXAMPLE:' in first_line: + return first_line.split(':')[1].strip() + except Exception as e: + logging.error(f"Error reading example ID from {path}: {e}") + return None + + +def process_local_examples(local_examples_dir: str = 'local_examples', + examples_dir: str = 'examples', + examples_json: str = 'data/examples.json') -> None: + """ + Process local examples and integrate them into the examples system. + + Works like remote examples - each file contains an EXAMPLE: header + and can be any supported language. + + Args: + local_examples_dir: Directory containing local example source files + examples_dir: Target directory for processed examples + examples_json: Path to examples.json file + """ + + if not os.path.exists(local_examples_dir): + logging.info(f"Local examples directory {local_examples_dir} not found, skipping") + return + + # Load existing examples data + examples_data = {} + if os.path.exists(examples_json): + examples_data = load_dict(examples_json) + + # Process each file in local_examples directory + for filename in os.listdir(local_examples_dir): + source_file = os.path.join(local_examples_dir, filename) + + if not os.path.isfile(source_file): + continue + + # Get language from file extension + language = get_language_from_extension(filename) + if not language: + logging.warning(f"Unknown file extension for: {filename}") + continue + + # Get example ID from file content + example_id = get_example_id_from_file(source_file) + if not example_id: + logging.warning(f"No EXAMPLE: header found in {filename}") + continue + + logging.info(f"Processing local example: {example_id} ({language})") + + # Create target directory + target_dir = os.path.join(examples_dir, example_id) + mkdir_p(target_dir) + + # Initialize example data + if example_id not in examples_data: + examples_data[example_id] = {} + + # Copy file to target directory with local_ prefix + base_name = os.path.splitext(filename)[0] + ext = os.path.splitext(filename)[1] + target_filename = f"local_{base_name}{ext}" + target_file = os.path.join(target_dir, target_filename) + shutil.copy2(source_file, target_file) + + # Process with Example class + example = Example(language, target_file) + + # Get client name + client_name = get_client_name_from_language(language) + + # Create metadata + example_metadata = { + 'source': source_file, + 'language': language, + 'target': target_file, + 'highlight': example.highlight, + 'hidden': example.hidden, + 'named_steps': example.named_steps, + 'sourceUrl': None # Local examples don't have source URLs + } + + examples_data[example_id][client_name] = example_metadata + logging.info(f"Processed {client_name} example for {example_id}") + + # Save updated examples data + dump_dict(examples_json, examples_data) + logging.info(f"Updated examples data saved to {examples_json}") + + +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO, + format='%(levelname)s: %(message)s') + + process_local_examples() + print("Local examples processing complete") diff --git a/build/make.py b/build/make.py index b278806553..7e423cce9f 100644 --- a/build/make.py +++ b/build/make.py @@ -1,10 +1,12 @@ import argparse from datetime import datetime import logging +import sys import tempfile from components.component import All from components.util import mkdir_p +from local_examples import process_local_examples def parse_args() -> argparse.Namespace: @@ -30,20 +32,19 @@ def parse_args() -> argparse.Namespace: ARGS = parse_args() mkdir_p(ARGS.tempdir) - # Configure logging BEFORE creating objects - log_level = getattr(logging, ARGS.loglevel.upper()) - logging.basicConfig( - level=log_level, - format='%(message)s %(filename)s:%(lineno)d - %(funcName)s', - force=True # Force reconfiguration in case logging was already configured - ) - # Load settings ALL = All(ARGS.stack, None, ARGS.__dict__) # Make the stack + logging.basicConfig( + level=ARGS.loglevel, format=f'{sys.argv[0]}: %(levelname)s %(asctime)s %(message)s') print(f'Applying all configured components"{ALL._name}"') start = datetime.now() ALL.apply() + + # Process local examples + print('Processing local examples') + process_local_examples() + total = datetime.now() - start print(f'+OK ({total.microseconds / 1000} ms)') diff --git a/content/apis/_index.md b/content/apis/_index.md index 4a5ca54c45..f6d27af6f2 100644 --- a/content/apis/_index.md +++ b/content/apis/_index.md @@ -60,5 +60,5 @@ If you have installed Redis Enterprise Software, you can automate operations wit If you need to install Redis Enterprise on Kubernetes, then you can use the [Redis Enterprise for Kubernetes Operators]({{< relref "/operate/Kubernetes/" >}}). You can find the resource definitions here: -- [Redis Enterprise Cluster API]({{}}) -- [Redis Enterprise Database API]({{}}) +- [Redis Enterprise Cluster API]({{}}) +- [Redis Enterprise Database API]({{}}) diff --git a/content/commands/cf.exists.md b/content/commands/cf.exists.md index 2ff5e9173f..f561542fec 100644 --- a/content/commands/cf.exists.md +++ b/content/commands/cf.exists.md @@ -59,6 +59,8 @@ redis> CF.EXISTS cf item2 (integer) 0 {{< / highlight >}} +## Return information + {{< multitabs id="cf-exists-return-info" tab1="RESP2" tab2="RESP3" >}} diff --git a/content/commands/cms.info.md b/content/commands/cms.info.md index de4ffc6089..a33151f7bb 100644 --- a/content/commands/cms.info.md +++ b/content/commands/cms.info.md @@ -47,6 +47,8 @@ redis> CMS.INFO test 6) (integer) 0 ``` +## Return information + {{< multitabs id=“cms-info-return-info" tab1="RESP2" tab2="RESP3" >}} diff --git a/content/commands/cms.query.md b/content/commands/cms.query.md index 6e8e868106..868c0b0ec0 100644 --- a/content/commands/cms.query.md +++ b/content/commands/cms.query.md @@ -46,6 +46,8 @@ redis> CMS.QUERY test foo bar 2) (integer) 42 ``` +## Return information + {{< multitabs id=“cms-merge-return-info" tab1="RESP2" tab2="RESP3" >}} diff --git a/content/commands/ft._list.md b/content/commands/ft._list.md index 8599080c2d..9fa871ccbe 100644 --- a/content/commands/ft._list.md +++ b/content/commands/ft._list.md @@ -38,10 +38,6 @@ In the future, a [`SCAN`]({{< relref "/commands/scan" >}}) type of command will contains a large number of indices. {{% /alert %}} -## Return - -[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with index names. - ## Examples ```sql @@ -49,4 +45,18 @@ FT._LIST 1) "idx" 2) "movies" 3) "imdb" -``` \ No newline at end of file +``` + +## Return information + +{{< multitabs id="ft-_list-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of index names as [simple strings]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}). + +-tab-sep- + +[Set]({{< relref "/develop/reference/protocol-spec#sets" >}}) of index names as [simple strings]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}). + +{{< /multitabs >}} diff --git a/content/commands/ft.aggregate.md b/content/commands/ft.aggregate.md index 47aa2b4d28..ca5b28ed64 100644 --- a/content/commands/ft.aggregate.md +++ b/content/commands/ft.aggregate.md @@ -354,12 +354,7 @@ You can use `@__score` in a pipeline as shown in the following example: selects the dialect version under which to execute the query. If not specified, the query will execute under the default dialect version set during module initial loading or via [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) command. -## Return - -FT.AGGREGATE returns an array reply where each row is an array reply and represents a single aggregate result. -The [integer reply]({{< relref "develop/reference/protocol-spec#resp-integers" >}}) at position `1` does not represent a valid value. - -### Return multiple values +## Return multiple values See [Return multiple values]({{< relref "commands/ft.search#return-multiple-values/" >}}) in [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) The `DIALECT` can be specified as a parameter in the FT.AGGREGATE command. If it is not specified, the `DEFAULT_DIALECT` is used, which can be set using [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) or by passing it as an argument to the `redisearch` module when it is loaded. @@ -489,13 +484,35 @@ Next, count GitHub events by user (actor), to produce the most active users. +## Return information + +{{< multitabs id="ft-aggregate-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with the first element being the total number of results, followed by result rows as [arrays]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of field-value pairs. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: incorrect number of arguments, non-existent index, invalid query syntax. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) with the following fields: + - `attributes`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of attribute names. + - `format`: [Simple string]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}) - result format. + - `results`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [maps]({{< relref "/develop/reference/protocol-spec#maps" >}}) containing aggregated data. + - `total_results`: [Integer]({{< relref "/develop/reference/protocol-spec#integers" >}}) - total number of results. + - `warning`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of warning messages. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: incorrect number of arguments, non-existent index, invalid query syntax. + +{{< /multitabs >}} + ## See also -[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) ## Related topics - [Aggregations]({{< relref "/develop/ai/search-and-query/advanced-concepts/aggregations" >}}) - [Key and field expiration behavior]({{< relref "/develop/ai/search-and-query/advanced-concepts/expiration" >}}) - [RediSearch]({{< relref "/develop/ai/search-and-query" >}}) - diff --git a/content/commands/ft.aliasadd.md b/content/commands/ft.aliasadd.md index f03c8b83ae..7205b39ca0 100644 --- a/content/commands/ft.aliasadd.md +++ b/content/commands/ft.aliasadd.md @@ -50,10 +50,6 @@ alias. FT.ALIASADD allows administrators to transparently redirect application queries to alternative indexes. -## Return - -FT.ALIASADD returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -74,10 +70,24 @@ Attempting to add the same alias returns a message that the alias already exists {{< / highlight >}}
-## See also +## Return information + +{{< multitabs id="ft-aliasadd-return-info" + tab1="RESP2" + tab2="RESP3" >}} -[`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: alias already exists, index does not exist. -## Related topics +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: alias already exists, index does not exist. + +{{< /multitabs >}} + +## See also -[RediSearch]({{< relref "/develop/ai/search-and-query/" >}}) \ No newline at end of file +[`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) diff --git a/content/commands/ft.aliasdel.md b/content/commands/ft.aliasdel.md index 937e4db0ff..1b89514ac8 100644 --- a/content/commands/ft.aliasdel.md +++ b/content/commands/ft.aliasdel.md @@ -43,10 +43,6 @@ Remove an alias from an index is index alias to be removed. -## Return - -FT.ALIASDEL returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -60,10 +56,24 @@ OK {{< / highlight >}}
-## See also +## Return information + +{{< multitabs id="ft-aliasdel-return-info" + tab1="RESP2" + tab2="RESP3" >}} -[`FT.ALIASADD`]({{< relref "commands/ft.aliasadd/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: alias does not exist. -## Related topics +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: alias does not exist. + +{{< /multitabs >}} + +## See also -[RediSearch]({{< relref "/develop/ai/search-and-query/" >}}) \ No newline at end of file +[`FT.ALIASADD`]({{< relref "commands/ft.aliasadd/" >}}) | [`FT.ALIASUPDATE`]({{< relref "commands/ft.aliasupdate/" >}}) diff --git a/content/commands/ft.aliasupdate.md b/content/commands/ft.aliasupdate.md index d9b4aad62d..20f1bc4350 100644 --- a/content/commands/ft.aliasupdate.md +++ b/content/commands/ft.aliasupdate.md @@ -46,10 +46,6 @@ index, FT.ALIASUPDATE removes the alias association with the previous index. is alias to be added to an index. -## Return - -FT.ALIASUPDATE returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -62,6 +58,24 @@ Update the alias of an index. OK {{< / highlight >}} +## Return information + +{{< multitabs id="ft-aliasupdate-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: index does not exist. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: index does not exist. + +{{< /multitabs >}} + ## See also [`FT.ALIASADD`]({{< relref "commands/ft.aliasadd/" >}}) | [`FT.ALIASDEL`]({{< relref "commands/ft.aliasdel/" >}}) diff --git a/content/commands/ft.alter.md b/content/commands/ft.alter.md index af5fa960a2..520b9de71e 100644 --- a/content/commands/ft.alter.md +++ b/content/commands/ft.alter.md @@ -81,10 +81,6 @@ contain more than 32 attributes, create it with the `MAXTEXTFIELDS` option.
-## Return - -FT.ALTER returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -96,6 +92,24 @@ OK {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-alter-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, invalid schema syntax. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, invalid schema syntax. + +{{< /multitabs >}} + ## See also [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) diff --git a/content/commands/ft.config-get.md b/content/commands/ft.config-get.md index 1647f9134f..60dfe117fd 100644 --- a/content/commands/ft.config-get.md +++ b/content/commands/ft.config-get.md @@ -48,10 +48,6 @@ Retrieve configuration options is name of the configuration option, or '*' for all. -## Return - -FT.CONFIG GET returns an array reply of the configuration name and value. - ## Examples
@@ -140,9 +136,23 @@ FT.CONFIG GET returns an array reply of the configuration name and value. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-config-get-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [arrays]({{< relref "/develop/reference/protocol-spec#arrays" >}}), where each sub-array contains a configuration option name and its value. + +-tab-sep- + +[Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) where keys are configuration option names and values are their corresponding values. + +{{< /multitabs >}} + ## See also -[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.CONFIG HELP`]({{< relref "commands/ft.config-help/" >}}) +[`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.CONFIG HELP`]({{< relref "commands/ft.config-help/" >}}) ## Related topics diff --git a/content/commands/ft.config-help.md b/content/commands/ft.config-help.md index f5cda7651e..206c914110 100644 --- a/content/commands/ft.config-help.md +++ b/content/commands/ft.config-help.md @@ -46,10 +46,6 @@ Describe configuration options is name of the configuration option, or '*' for all. -## Return - -FT.CONFIG HELP returns an array reply of the configuration name and value. - ## Examples
@@ -65,6 +61,20 @@ FT.CONFIG HELP returns an array reply of the configuration name and value. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-config-help-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of help information. + +-tab-sep- + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of help information. + +{{< /multitabs >}} + ## See also [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.CONFIG GET`]({{< relref "commands/ft.config-get/" >}}) diff --git a/content/commands/ft.config-set.md b/content/commands/ft.config-set.md index 3b636225f4..a38f3a8a1b 100644 --- a/content/commands/ft.config-set.md +++ b/content/commands/ft.config-set.md @@ -62,10 +62,6 @@ is name of the configuration option, or '*' for all. is value of the configuration option. -## Return - -FT.CONFIG SET returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -77,6 +73,24 @@ OK {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-config-set-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid option, invalid value. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: invalid option, invalid value. + +{{< /multitabs >}} + ## See also [`FT.CONFIG GET`]({{< relref "commands/ft.config-get/" >}}) | [`FT.CONFIG HELP`]({{< relref "commands/ft.config-help/" >}}) diff --git a/content/commands/ft.create.md b/content/commands/ft.create.md index f7a4480cd6..2d394fa424 100644 --- a/content/commands/ft.create.md +++ b/content/commands/ft.create.md @@ -403,10 +403,6 @@ if set, does not scan and index. -## Return - -FT.CREATE returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -463,6 +459,24 @@ The following example uses data similar to the hash examples above but uses JSON {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-create-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: index already exists, invalid schema syntax. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: index already exists, invalid schema syntax. + +{{< /multitabs >}} + ## See also [`FT.ALTER`]({{< relref "commands/ft.alter/" >}}) | [`FT.DROPINDEX`]({{< relref "commands/ft.dropindex/" >}}) diff --git a/content/commands/ft.cursor-del.md b/content/commands/ft.cursor-del.md index 43b416fe35..8e5ca4f52e 100644 --- a/content/commands/ft.cursor-del.md +++ b/content/commands/ft.cursor-del.md @@ -52,10 +52,6 @@ is index name. is id of the cursor. -## Returns - -FT.CURSOR DEL returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -74,6 +70,24 @@ Check that the cursor is deleted. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-cursor-del-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: cursor does not exist. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: cursor does not exist. + +{{< /multitabs >}} + ## See also [`FT.CURSOR READ`]({{< relref "commands/ft.cursor-read/" >}}) diff --git a/content/commands/ft.cursor-read.md b/content/commands/ft.cursor-read.md index 9bd8921132..2a9412e056 100644 --- a/content/commands/ft.cursor-read.md +++ b/content/commands/ft.cursor-read.md @@ -64,10 +64,6 @@ is id of the cursor. is number of results to read. This parameter overrides `COUNT` specified in [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}). -## Return - -FT.CURSOR READ returns an array reply where each row is an array reply and represents a single aggregate result. - ## Examples
@@ -78,6 +74,24 @@ FT.CURSOR READ returns an array reply where each row is an array reply and repre {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-cursor-read-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with search results and metadata. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: cursor not found. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) with structured search results and metadata. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: cursor not found. + +{{< /multitabs >}} + ## See also [`FT.CURSOR DEL`]({{< relref "commands/ft.cursor-del/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) diff --git a/content/commands/ft.dictadd.md b/content/commands/ft.dictadd.md index 24fece3178..a50def4343 100644 --- a/content/commands/ft.dictadd.md +++ b/content/commands/ft.dictadd.md @@ -52,10 +52,6 @@ is dictionary name. term to add to the dictionary. -## Return - -FT.DICTADD returns an integer reply, the number of new terms that were added. - ## Examples
@@ -67,6 +63,20 @@ FT.DICTADD returns an integer reply, the number of new terms that were added. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-dictadd-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of new terms added to the dictionary. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of new terms added to the dictionary. + +{{< /multitabs >}} + ## See also [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) diff --git a/content/commands/ft.dictdel.md b/content/commands/ft.dictdel.md index 8eac485159..df16ef8e63 100644 --- a/content/commands/ft.dictdel.md +++ b/content/commands/ft.dictdel.md @@ -52,10 +52,6 @@ is dictionary name. term to delete from the dictionary. -## Return - -FT.DICTDEL returns an integer reply, the number of new terms that were deleted. - ## Examples
@@ -67,6 +63,20 @@ FT.DICTDEL returns an integer reply, the number of new terms that were deleted. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-dictdel-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of terms deleted from the dictionary. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of terms deleted from the dictionary. + +{{< /multitabs >}} + ## See also [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) diff --git a/content/commands/ft.dictdump.md b/content/commands/ft.dictdump.md index 07ff3ec1a4..aea679fa91 100644 --- a/content/commands/ft.dictdump.md +++ b/content/commands/ft.dictdump.md @@ -45,10 +45,6 @@ Dump all terms in the given dictionary is dictionary name. -## Return - -FT.DICTDUMP returns an array, where each element is term (string). - ## Examples
@@ -62,6 +58,20 @@ FT.DICTDUMP returns an array, where each element is term (string). {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-dictdump-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of dictionary terms. + +-tab-sep- + +[Set]({{< relref "/develop/reference/protocol-spec#sets" >}}) of dictionary terms. + +{{< /multitabs >}} + ## See also [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) diff --git a/content/commands/ft.dropindex.md b/content/commands/ft.dropindex.md index 5c3362eae9..7ad0535472 100644 --- a/content/commands/ft.dropindex.md +++ b/content/commands/ft.dropindex.md @@ -66,10 +66,6 @@ To check the completion of the indexing, use [`FT.INFO`]({{< relref "commands/ft -## Return - -FT.DROPINDEX returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -81,6 +77,24 @@ OK {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-dropindex-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +{{< /multitabs >}} + ## See also [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.INFO`]({{< relref "commands/ft.info/" >}}) diff --git a/content/commands/ft.explain.md b/content/commands/ft.explain.md index 997cdeb055..d640c27434 100644 --- a/content/commands/ft.explain.md +++ b/content/commands/ft.explain.md @@ -71,10 +71,6 @@ is dialect version under which to execute the query. If not specified, the query {{% /alert %}} -## Return - -FT.EXPLAIN returns a string representing the execution plan. - ## Examples
@@ -103,6 +99,24 @@ INTERSECT { {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-explain-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Bulk string]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the query execution plan. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +-tab-sep- + +One of the following: +* [Bulk string]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the query execution plan. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +{{< /multitabs >}} + ## See also [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) diff --git a/content/commands/ft.explaincli.md b/content/commands/ft.explaincli.md index 47c8f62ae3..a11c9cabdc 100644 --- a/content/commands/ft.explaincli.md +++ b/content/commands/ft.explaincli.md @@ -71,10 +71,6 @@ In the returned response, a `+` on a term is an indication of stemming. -## Return - -FT.EXPLAINCLI returns an array reply with a string representing the execution plan. - ## Examples
@@ -116,6 +112,24 @@ $ redis-cli {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-explaincli-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the query execution plan in CLI format. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +-tab-sep- + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the query execution plan in CLI format. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +{{< /multitabs >}} + ## See also [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) diff --git a/content/commands/ft.info.md b/content/commands/ft.info.md index ab1bb06898..609fa028bc 100644 --- a/content/commands/ft.info.md +++ b/content/commands/ft.info.md @@ -39,10 +39,6 @@ Returns information and statistics about a given index.
is the name of the given index. You must first create the index using [`FT.CREATE`]({{< relref "commands/ft.create/" >}}). -## RESP reply - -`FT.INFO` returns an array reply with pairs of keys and values. - ## Returned values ### General @@ -354,6 +350,24 @@ The next two GC-related fields are relevant in scenarios where simultaneous chan {{< / highlight >}} +## Return information + +{{< multitabs id="ft-info-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of key-value pairs containing index information and statistics. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) containing index information and statistics as key-value pairs. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +{{< /multitabs >}} + ## See also [`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) diff --git a/content/commands/ft.profile.md b/content/commands/ft.profile.md index 552eff5e91..3275179aa2 100644 --- a/content/commands/ft.profile.md +++ b/content/commands/ft.profile.md @@ -90,10 +90,6 @@ is the query string, sent to `FT.SEARCH` or `FT.AGGREGATE`. The second element contains information about query creation, iterator profiles, and result processor profiles. Details of the second element follow in the sections below. -### Results - -This section contains the search results. - ### Per-shard profiles This section contains query execution details for each shard. @@ -399,6 +395,24 @@ Here's an example of running the `FT.PROFILE` command for a vector query. {{< /highlight >}} +## Return information + +{{< multitabs id="ft-profile-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with two elements: search results and profiling information. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) with two keys: `Results` containing search results and `Profile` containing profiling information. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +{{< /multitabs >}} + ## See also [`FT.SEARCH`]({{< relref "commands/ft.search/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) diff --git a/content/commands/ft.search.md b/content/commands/ft.search.md index 48d87fc42f..9f3e607f4a 100644 --- a/content/commands/ft.search.md +++ b/content/commands/ft.search.md @@ -852,9 +852,32 @@ Query with `CONTAINS` operator: +## Return information + +{{< multitabs id="ft-search-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) with the first element being the total number of results, followed by document IDs and their field-value pairs as [arrays]({{< relref "/develop/reference/protocol-spec#arrays" >}}). +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) with the following fields: + - `total_results`: [Integer]({{< relref "/develop/reference/protocol-spec#integers" >}}) - total number of results + - `results`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [maps]({{< relref "/develop/reference/protocol-spec#maps" >}}) containing document information + - `attributes`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of attribute names + - `format`: [Simple string]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}) - result format + - `warning`: [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of warning messages +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, syntax error in query. + +{{< /multitabs >}} + ## See also -[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) | [`FT.AGGREGATE`]({{< relref "commands/ft.aggregate/" >}}) ## Related topics diff --git a/content/commands/ft.spellcheck.md b/content/commands/ft.spellcheck.md index f4fbb759e4..de6ffcb210 100644 --- a/content/commands/ft.spellcheck.md +++ b/content/commands/ft.spellcheck.md @@ -132,6 +132,24 @@ The score is calculated by dividing the number of documents in which the suggest {{< / highlight >}} +## Return information + +{{< multitabs id="ft-spellcheck-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of spell check results for each term. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) with a `results` key containing spell check results for each term. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +{{< /multitabs >}} + ## See also [`FT.CONFIG SET`]({{< relref "commands/ft.config-set/" >}}) | [`FT.DICTADD`]({{< relref "commands/ft.dictadd/" >}}) | [`FT.DICTDEL`]({{< relref "commands/ft.dictdel/" >}}) | [`FT.DICTDUMP`]({{< relref "commands/ft.dictdump/" >}}) diff --git a/content/commands/ft.sugadd.md b/content/commands/ft.sugadd.md index fa60274413..52538509e5 100644 --- a/content/commands/ft.sugadd.md +++ b/content/commands/ft.sugadd.md @@ -85,10 +85,6 @@ increments the existing entry of the suggestion by the given score, instead of r saves an extra payload with the suggestion, that can be fetched by adding the `WITHPAYLOADS` argument to [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}). -## Return - -FT.SUGADD returns an integer reply, which is the current size of the suggestion dictionary. - ## Examples
@@ -100,6 +96,20 @@ FT.SUGADD returns an integer reply, which is the current size of the suggestion {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-sugadd-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): number of elements added to the suggestion dictionary. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): number of elements added to the suggestion dictionary. + +{{< /multitabs >}} + ## See also [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) diff --git a/content/commands/ft.sugdel.md b/content/commands/ft.sugdel.md index 0288dc0541..5db1fd767e 100644 --- a/content/commands/ft.sugdel.md +++ b/content/commands/ft.sugdel.md @@ -52,10 +52,6 @@ is suggestion dictionary key. is suggestion string to index. -## Return - -FT.SUGDEL returns an integer reply, 1 if the string was found and deleted, 0 otherwise. - ## Examples
@@ -69,6 +65,20 @@ FT.SUGDEL returns an integer reply, 1 if the string was found and deleted, 0 oth {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-sugdel-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): 1 if the suggestion was deleted, 0 if it was not found. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): 1 if the suggestion was deleted, 0 if it was not found. + +{{< /multitabs >}} + ## See also [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) | [`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) diff --git a/content/commands/ft.sugget.md b/content/commands/ft.sugget.md index 12d37ba881..967cdb4ac0 100644 --- a/content/commands/ft.sugget.md +++ b/content/commands/ft.sugget.md @@ -110,6 +110,20 @@ FT.SUGGET returns an array reply, which is a list of the top suggestions matchin {{< / highlight >}} +## Return information + +{{< multitabs id="ft-sugget-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of the top suggestions matching the prefix, optionally with a score after each entry. + +-tab-sep- + +[Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of the top suggestions matching the prefix, optionally with a score after each entry. + +{{< /multitabs >}} + ## See also [`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGLEN`]({{< relref "commands/ft.suglen/" >}}) diff --git a/content/commands/ft.suglen.md b/content/commands/ft.suglen.md index b583f17bed..ea2eb033d9 100644 --- a/content/commands/ft.suglen.md +++ b/content/commands/ft.suglen.md @@ -43,10 +43,6 @@ Get the size of an auto-complete suggestion dictionary is suggestion dictionary key. -## Return - -FT.SUGLEN returns an integer reply, which is the current size of the suggestion dictionary. - ## Examples
@@ -58,6 +54,20 @@ FT.SUGLEN returns an integer reply, which is the current size of the suggestion {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-suglen-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): number of suggestions in the dictionary. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): number of suggestions in the dictionary. + +{{< /multitabs >}} + ## See also [`FT.SUGADD`]({{< relref "commands/ft.sugadd/" >}}) | [`FT.SUGDEL`]({{< relref "commands/ft.sugdel/" >}}) | [`FT.SUGGET`]({{< relref "commands/ft.sugget/" >}}) diff --git a/content/commands/ft.syndump.md b/content/commands/ft.syndump.md index 84aeed93ed..7f16b2cd5a 100644 --- a/content/commands/ft.syndump.md +++ b/content/commands/ft.syndump.md @@ -45,10 +45,6 @@ is index name. Use FT.SYNDUMP to dump the synonyms data structure. This command returns a list of synonym terms and their synonym group ids. -## Return - -FT.SYNDUMP returns an array reply, with a pair of `term` and an array of synonym groups. - ## Examples
@@ -66,6 +62,24 @@ FT.SYNDUMP returns an array reply, with a pair of `term` and an array of synonym {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-syndump-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of synonym terms and their associated synonym groups. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +-tab-sep- + +One of the following: +* [Map]({{< relref "/develop/reference/protocol-spec#maps" >}}) where keys are synonym terms and values are arrays of their associated synonym groups. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +{{< /multitabs >}} + ## See also [`FT.SYNUPDATE`]({{< relref "commands/ft.synupdate/" >}}) diff --git a/content/commands/ft.synupdate.md b/content/commands/ft.synupdate.md index ccc347a1c7..588f323b64 100644 --- a/content/commands/ft.synupdate.md +++ b/content/commands/ft.synupdate.md @@ -68,10 +68,6 @@ Use FT.SYNUPDATE to create or update a synonym group with additional terms. The does not scan and index, and only documents that are indexed after the update are affected. -## Return - -FT.SYNUPDATE returns a simple string reply `OK` if executed correctly, or an error reply otherwise. - ## Examples
@@ -88,6 +84,24 @@ OK {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-synupdate-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index. + +{{< /multitabs >}} + ## See also [`FT.SYNDUMP`]({{< relref "commands/ft.syndump/" >}}) diff --git a/content/commands/ft.tagvals.md b/content/commands/ft.tagvals.md index 1a58aa11ce..59b17b51c2 100644 --- a/content/commands/ft.tagvals.md +++ b/content/commands/ft.tagvals.md @@ -65,10 +65,6 @@ Use FT.TAGVALS if your tag indexes things like cities, categories, and so on. FT.TAGVALS provides no paging or sorting, and the tags are not alphabetically sorted. FT.TAGVALS only operates on [tag fields]({{< relref "/develop/ai/search-and-query/advanced-concepts/tags" >}}). The returned strings are lowercase with whitespaces removed, but otherwise unchanged. -## Return - -FT.TAGVALS returns an array reply of all distinct tags in the tag index. - ## Examples
@@ -81,9 +77,27 @@ FT.TAGVALS returns an array reply of all distinct tags in the tag index. {{< / highlight >}}
+## Return information + +{{< multitabs id="ft-tagvals-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Array]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of distinct tag values as [bulk strings]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}). +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, not a tag field. + +-tab-sep- + +One of the following: +* [Set]({{< relref "/develop/reference/protocol-spec#sets" >}}) of distinct tag values as [bulk strings]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}). +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) in these cases: no such index, not a tag field. + +{{< /multitabs >}} + ## See also -[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) +[`FT.CREATE`]({{< relref "commands/ft.create/" >}}) ## Related topics diff --git a/content/commands/json.arrappend.md b/content/commands/json.arrappend.md index f387fecf9e..fc847ed400 100644 --- a/content/commands/json.arrappend.md +++ b/content/commands/json.arrappend.md @@ -63,11 +63,6 @@ To specify a string as an array value to append, wrap the quoted string with an {{% /alert %}} -## Return value - -`JSON.ARRAPPEND` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each `path` match, the array's new length, or `nil`, if the matching JSON value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -96,6 +91,24 @@ redis> JSON.GET item:1 $.colors
+## Return information + +{{< multitabs id="json-arrappend-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new length, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new length, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.arrindex.md b/content/commands/json.arrindex.md index aba172517a..e50c17789d 100644 --- a/content/commands/json.arrindex.md +++ b/content/commands/json.arrindex.md @@ -89,11 +89,6 @@ is exclusive stop value to specify in a slice of the array to search, including Out-of-range indexes round to the array's start and end. An inverse index range (such as the range from 1 to 0) returns unfound or `-1`. {{% /alert %}} -## Return value - -`JSON.ARRINDEX` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each path, the first position in the array of each JSON value that matches the path, `-1` if unfound in the array, or `nil`, if the matching JSON value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -149,6 +144,24 @@ redis> JSON.ARRINDEX item:1 $..colors '"silver"' {{< / highlight >}}
+## Return information + +{{< multitabs id="json-arrindex-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the first position in the array, `-1` if unfound, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the first position in the array, `-1` if unfound, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the first position in the array, `-1` if unfound, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the first position in the array, `-1` if unfound, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.arrinsert.md b/content/commands/json.arrinsert.md index 82d1bafb15..83d21e264b 100644 --- a/content/commands/json.arrinsert.md +++ b/content/commands/json.arrinsert.md @@ -71,11 +71,6 @@ is position in the array where you want to insert a value. The index must be in is JSONPath to specify. Default is root `$`. -## Return value - -`JSON.ARRINSERT` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -124,6 +119,24 @@ redis> JSON.GET item:1 $.colors {{< / highlight >}}
+## Return information + +{{< multitabs id="json-arrinsert-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new size, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new size, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new size, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new size, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) diff --git a/content/commands/json.arrlen.md b/content/commands/json.arrlen.md index 6129b00dc1..960fa1727c 100644 --- a/content/commands/json.arrlen.md +++ b/content/commands/json.arrlen.md @@ -51,11 +51,6 @@ is key to parse. is JSONPath to specify. Default is root `$`, if not provided. Returns null if the `key` or `path` do not exist. -## Return - -`JSON.ARRLEN` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of integer replies, an integer for each matching value, each is the array's length, or `nil`, if the matching value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -97,6 +92,24 @@ redis> JSON.GET item:2 '$..max_level'
+## Return information + +{{< multitabs id="json-arrlen-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array length, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array length, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.arrpop.md b/content/commands/json.arrpop.md index 40431b799c..c5c4616711 100644 --- a/content/commands/json.arrpop.md +++ b/content/commands/json.arrpop.md @@ -65,11 +65,6 @@ is position in the array to start popping from. Default is `-1`, meaning the las is JSONPath to specify. Default is root `$`. -## Return - -`JSON.ARRPOP` returns an [array]({{< relref "develop/reference/protocol-spec#resp-arrays" >}}) of bulk string replies for each path, each reply is the popped JSON value, or `nil`, if the matching JSON value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -118,6 +113,20 @@ redis> JSON.GET key $.[1].max_level {{< / highlight >}}
+## Return information + +{{< multitabs id="json-arrpop-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the popped JSON value as a string, or `null` if the matching value is not an array. + +-tab-sep- + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the popped JSON value as a string, or `null` if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) diff --git a/content/commands/json.arrtrim.md b/content/commands/json.arrtrim.md index e4e3fc6356..bdeed89be4 100644 --- a/content/commands/json.arrtrim.md +++ b/content/commands/json.arrtrim.md @@ -78,11 +78,6 @@ Behavior as of RedisJSON v2.0: * If `stop` is larger than the end of the array, it is treated like the last element. {{% /alert %}} -## Return - -JSON.ARRTRIM returns an array of integer replies for each path, the array's new size, or `nil`, if the matching JSON value is not an array. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -125,6 +120,24 @@ redis> JSON.GET key $.[1].max_level {{< / highlight >}}
+## Return information + +{{< multitabs id="json-arrtrim-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new size, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new size, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the array's new size, or `null` if the matching value is not an array. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the array's new size, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an array. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.clear.md b/content/commands/json.clear.md index f0cf2ef467..d8542c187b 100644 --- a/content/commands/json.clear.md +++ b/content/commands/json.clear.md @@ -53,11 +53,6 @@ is key to parse. is JSONPath to specify. Default is root `$`. Nonexisting paths are ignored. -## Return - -JSON.CLEAR returns an integer reply specifying the number of matching JSON arrays and objects cleared + number of matching JSON numerical values zeroed. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - {{% alert title="Note" color="warning" %}} Already cleared values are ignored for empty containers and zero numbers. @@ -91,6 +86,20 @@ redis> JSON.GET doc $ {{< / highlight >}} +## Return information + +{{< multitabs id="json-clear-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of matching JSON arrays and objects cleared plus the number of matching JSON numerical values zeroed. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of matching JSON arrays and objects cleared plus the number of matching JSON numerical values zeroed. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.debug-help.md b/content/commands/json.debug-help.md index f191df79d7..f1f4dc7109 100644 --- a/content/commands/json.debug-help.md +++ b/content/commands/json.debug-help.md @@ -24,9 +24,19 @@ title: JSON.DEBUG HELP --- Return helpful information about the [`JSON.DEBUG`]({{< relref "commands/json.debug/" >}}) command -## Return +## Return information -JSON.DEBUG HELP returns an array with helpful messages. +{{< multitabs id="json-debug-help-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing helpful messages about the JSON.DEBUG command. + +-tab-sep- + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing helpful messages about the JSON.DEBUG command. + +{{< /multitabs >}} ## See also diff --git a/content/commands/json.debug-memory.md b/content/commands/json.debug-memory.md index a2b2becfe5..b08edbb08a 100644 --- a/content/commands/json.debug-memory.md +++ b/content/commands/json.debug-memory.md @@ -55,11 +55,6 @@ is key to parse. is JSONPath to specify. Default is root `$`. -## Return - -JSON.DEBUG MEMORY returns an integer reply specified as the value size in bytes. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -80,6 +75,20 @@ redis> JSON.DEBUG MEMORY item:2 {{< / highlight >}}
+## Return information + +{{< multitabs id="json-debug-memory-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the value size in bytes. + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the value size in bytes. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) diff --git a/content/commands/json.del.md b/content/commands/json.del.md index f585fddc6e..30cc403841 100644 --- a/content/commands/json.del.md +++ b/content/commands/json.del.md @@ -58,11 +58,6 @@ Deleting an object's root is equivalent to deleting the key from Redis. {{% /alert %}} -## Return - -JSON.DEL returns an integer reply specified as the number of paths deleted (0 or more). -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -90,6 +85,20 @@ redis> JSON.GET doc $ {{< / highlight >}}
+## Return information + +{{< multitabs id="json-del-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of paths deleted (0 or more). + +-tab-sep- + +[Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}): the number of paths deleted (0 or more). + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) diff --git a/content/commands/json.get.md b/content/commands/json.get.md index c6728fdf0e..e3a34f9ba1 100644 --- a/content/commands/json.get.md +++ b/content/commands/json.get.md @@ -104,14 +104,6 @@ redis> JSON.GET myjsonkey INDENT "\t" NEWLINE "\n" SPACE " " path.to.value[1] {{% /alert %}} -## Return - -JSON.GET returns a bulk string representing a JSON array of string replies. -Each string is the JSON serialization of each JSON value that matches a path. -Using multiple paths, JSON.GET returns a bulk string representing a JSON object with string values. -Each string value is an array of the JSON serialization of each JSON value that matches a path. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -139,6 +131,26 @@ redis> JSON.GET doc ..a $..b {{< / highlight >}}
+## Return information + +{{< multitabs id="json-get-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}): a JSON-encoded string representing the value(s) at the specified path(s). + +With a single path, returns the JSON serialization of the value at that path. +With multiple paths, returns a JSON object where each key is a path and each value is an array of JSON serializations. + +-tab-sep- + +[Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}): a JSON-encoded string with a top-level array containing the value(s) at the specified path(s). + +With a single path using `$` (default in RESP3), returns a JSON array containing the serialized value. +With multiple paths, returns a JSON object where each key is a path and each value is an array of JSON serializations. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) diff --git a/content/commands/json.merge.md b/content/commands/json.merge.md index bb10477109..e3f990aa19 100644 --- a/content/commands/json.merge.md +++ b/content/commands/json.merge.md @@ -66,12 +66,6 @@ is the JSON value to merge with at the specified path. Merging is done according * merging an existing array with any merged value, replaces the entire array with the value -## Return value - -JSON.MERGE returns a simple string reply: `OK` if executed correctly or `error` if fails to set the new values - -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples JSON.MERGE provides four different behaviors to merge changes on a given key: create a non-existent path, update an existing path with a new value, delete an existing path, or replace an array with a new array @@ -149,6 +143,24 @@ redis> JSON.GET doc +## Return information + +{{< multitabs id="json-merge-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if the operation fails to set the new values. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if the operation fails to set the new values. + +{{< /multitabs >}} + ## See also [`JSON.GET`]({{< relref "commands/json.get/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) | [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MSET`]({{< relref "commands/json.mset/" >}}) diff --git a/content/commands/json.mget.md b/content/commands/json.mget.md index 924aeec1ad..08c494ae13 100644 --- a/content/commands/json.mget.md +++ b/content/commands/json.mget.md @@ -61,11 +61,6 @@ is JSONPath to specify. Returns `null` for nonexistent paths. -## Return - -JSON.MGET returns an array of bulk string replies specified as the JSON serialization of the value at each key's path. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -89,6 +84,20 @@ redis> JSON.MGET doc1 doc2 $..a {{< / highlight >}}
+## Return information + +{{< multitabs id="json-mget-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the JSON serialization of the value at the corresponding key's path, or `null` if the key or path doesn't exist. + +-tab-sep- + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the JSON serialization of the value at the corresponding key's path, or `null` if the key or path doesn't exist. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) diff --git a/content/commands/json.mset.md b/content/commands/json.mset.md index 6e20bb6609..5ad5bd6763 100644 --- a/content/commands/json.mset.md +++ b/content/commands/json.mset.md @@ -71,12 +71,6 @@ is JSONPath to specify. For new Redis keys the `path` must be the root. For exis is value to set at the specified path -## Return value - -JSET.MSET returns a simple string reply: `OK` if executed correctly or `error` if fails to set the new values - -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -96,6 +90,24 @@ redis> JSON.GET doc3 {{< / highlight >}}
+## Return information + +{{< multitabs id="json-mset-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if the operation fails to set the new values. + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if the operation fails to set the new values. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.MGET`]({{< relref "commands/json.mget/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) diff --git a/content/commands/json.numincrby.md b/content/commands/json.numincrby.md index 1f046211e6..5fbb837f1d 100644 --- a/content/commands/json.numincrby.md +++ b/content/commands/json.numincrby.md @@ -55,11 +55,6 @@ is JSONPath to specify. is number value to increment. -## Return - -JSON.NUMINCRBY returns a bulk string reply specified as a stringified new value for each path, or `nil`, if the matching JSON value is not a number. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -88,6 +83,24 @@ redis> JSON.NUMINCRBY doc $..a 2
+## Return information + +{{< multitabs id="json-numincrby-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing a JSON-encoded string with the new value(s), or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number. + +With `.`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the stringified new value, [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the new value, or `null` if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +With `.`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the stringified new value, [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.nummultby.md b/content/commands/json.nummultby.md index 1bffcc79f7..3e8d7802ec 100644 --- a/content/commands/json.nummultby.md +++ b/content/commands/json.nummultby.md @@ -58,11 +58,6 @@ is number value to multiply. is JSONPath to specify. Default is root `$`. -## Return - -JSON.NUMMULTBY returns a bulk string reply specified as a stringified new values for each path, or `nil` element if the matching JSON value is not a number. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -74,6 +69,24 @@ redis> JSON.NUMMULTBY doc $..a 2 "[null,4,10,null]" {{< / highlight >}} +## Return information + +{{< multitabs id="json-nummultby-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing a JSON-encoded string with the new value(s), or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number. + +With `.`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the stringified new value, [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the new value, or `null` if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +With `.`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the stringified new value, [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a number, or [simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}) on error. + +{{< /multitabs >}} + ## See also [`JSON.NUMINCRBY`]({{< relref "commands/json.numincrby/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.objkeys.md b/content/commands/json.objkeys.md index 9b9dc93720..c34e327ac1 100644 --- a/content/commands/json.objkeys.md +++ b/content/commands/json.objkeys.md @@ -53,11 +53,6 @@ is JSONPath to specify. Default is root `$`. Returns `null` for nonexistant path -## Return - -JSON.OBJKEYS returns an array of array replies for each path, an array of the key names in the object as a bulk string reply, or `nil` if the matching JSON value is not an object. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -69,6 +64,24 @@ redis> JSON.OBJKEYS doc $..a 2) "c" {{< / highlight >}} +## Return information + +{{< multitabs id="json-objkeys-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [array replies]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}), where each nested array contains the key names in the object, or `null` if the matching value is not an object. + +With `.`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the key names in the object, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an object. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [array replies]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}), where each nested array contains the key names in the object, or `null` if the matching value is not an object. + +With `.`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) containing the key names in the object, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an object. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.objlen.md b/content/commands/json.objlen.md index 9401d7b1aa..ac3e71c10e 100644 --- a/content/commands/json.objlen.md +++ b/content/commands/json.objlen.md @@ -52,11 +52,6 @@ is JSONPath to specify. Default is root `$`. Returns `null` for nonexistant path -## Return - -JSON.OBJLEN returns an array of integer replies for each path specified as the number of keys in the object or `nil`, if the matching JSON value is not an object. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -67,6 +62,24 @@ redis> JSON.OBJLEN doc $..a 2) (integer) 2 {{< / highlight >}} +## Return information + +{{< multitabs id="json-objlen-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the number of keys in the object, or `null` if the matching value is not an object. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the number of keys in the object, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an object. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the number of keys in the object, or `null` if the matching value is not an object. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the number of keys in the object, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not an object. + +{{< /multitabs >}} + ## See also [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.resp.md b/content/commands/json.resp.md index 71087a1972..e76da46129 100644 --- a/content/commands/json.resp.md +++ b/content/commands/json.resp.md @@ -62,10 +62,6 @@ is JSONPath to specify. Default is root `$`. This command uses the following map For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). -## Return - -JSON.RESP returns an array reply specified as the JSON's RESP form detailed in [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -109,6 +105,20 @@ redis> JSON.RESP item:2 {{< / highlight >}}
+## Return information + +{{< multitabs id="json-resp-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) representing the JSON value in RESP form, as detailed in the [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). The mapping from JSON to RESP follows the rules described in the command arguments. + +-tab-sep- + +[Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) representing the JSON value in RESP form, as detailed in the [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). The mapping from JSON to RESP follows the rules described in the command arguments. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) diff --git a/content/commands/json.set.md b/content/commands/json.set.md index aef20bde94..68e771b4e9 100644 --- a/content/commands/json.set.md +++ b/content/commands/json.set.md @@ -81,17 +81,6 @@ sets the key only if it does not already exist. sets the key only if it already exists. -## Return value - -Returns one of these replies: -- A simple string reply: `OK` if executed correctly -- `nil` - - if `key` exists but `path` does not exist and cannot be created - - if an `NX` or `XX` condition is unmet -- error if `key` does not exist and `path` is not root (`.` or `$`) - -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -164,6 +153,25 @@ redis> JSON.SET nonexistentkey $.x 5 {{< / highlight >}}
+## Return information + +{{< multitabs id="json-set-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}): if `key` exists but `path` does not exist and cannot be created, or if an `NX` or `XX` condition is unmet. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if `key` does not exist and `path` is not root (`.` or `$`). + +-tab-sep- + +One of the following: +* [Simple string reply]({{< relref "/develop/reference/protocol-spec#simple-strings" >}}): `OK` if executed correctly. +* [Null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}): if `key` exists but `path` does not exist and cannot be created, or if an `NX` or `XX` condition is unmet. +* [Simple error reply]({{< relref "/develop/reference/protocol-spec#simple-errors" >}}): if `key` does not exist and `path` is not root (`.` or `$`). + +{{< /multitabs >}} ## See also diff --git a/content/commands/json.strappend.md b/content/commands/json.strappend.md index 24fbc3e851..311366b54b 100644 --- a/content/commands/json.strappend.md +++ b/content/commands/json.strappend.md @@ -62,11 +62,6 @@ To specify a string as an array value to append, wrap the quoted string with an is JSONPath to specify. Default is root `$`. -## Return value - -JSON.STRAPPEND returns an array of integer replies for each path, the string's new length, or `nil`, if the matching JSON value is not a string. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -80,6 +75,24 @@ redis> JSON.GET doc $ "[{\"a\":\"foobaz\",\"nested\":{\"a\":\"hellobaz\"},\"nested2\":{\"a\":31}}]" {{< / highlight >}} +## Return information + +{{< multitabs id="json-strappend-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the string's new length, or `null` if the matching value is not a string. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the string's new length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a string. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the string's new length, or `null` if the matching value is not a string. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the string's new length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a string. + +{{< /multitabs >}} + ## See also `JSON.ARRAPEND` | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.strlen.md b/content/commands/json.strlen.md index eafc70e614..dfb9499818 100644 --- a/content/commands/json.strlen.md +++ b/content/commands/json.strlen.md @@ -51,11 +51,6 @@ is key to parse. is JSONPath to specify. Default is root `$`, if not provided. Returns null if the `key` or `path` do not exist. -## Return - -JSON.STRLEN returns by recursive descent an array of integer replies for each path, the string's length, or `nil`, if the matching JSON value is not a string. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -67,6 +62,24 @@ redis> JSON.STRLEN doc $..a 3) (nil) {{< / highlight >}} +## Return information + +{{< multitabs id="json-strlen-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the string's length, or `null` if the matching value is not a string. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the string's length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a string. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the string's length, or `null` if the matching value is not a string. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the string's length, or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not a string. + +{{< /multitabs >}} + ## See also [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) | [`JSON.ARRINSERT`]({{< relref "commands/json.arrinsert/" >}}) diff --git a/content/commands/json.toggle.md b/content/commands/json.toggle.md index 82118b4e66..cabb29e4b7 100644 --- a/content/commands/json.toggle.md +++ b/content/commands/json.toggle.md @@ -51,11 +51,6 @@ is JSONPath to specify. Default is root `$`. -## Return - -JSON.TOGGLE returns an array of integer replies for each path, the new value (`0` if `false` or `1` if `true`), or `nil` for JSON values matching the path that are not Boolean. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples
@@ -97,6 +92,24 @@ redis> JSON.GET doc $ {{< / highlight >}}
+## Return information + +{{< multitabs id="json-toggle-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the new value (`0` if `false` or `1` if `true`), or `null` if the matching value is not Boolean. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the new value (`0` if `false` or `1` if `true`), or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not Boolean. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [integer replies]({{< relref "/develop/reference/protocol-spec#integers" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the new value (`0` if `false` or `1` if `true`), or `null` if the matching value is not Boolean. + +With `.`-based path argument: [Integer reply]({{< relref "/develop/reference/protocol-spec#integers" >}}) representing the new value (`0` if `false` or `1` if `true`), or [null reply]({{< relref "/develop/reference/protocol-spec#nulls" >}}) if the matching value is not Boolean. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.GET`]({{< relref "commands/json.get/" >}}) diff --git a/content/commands/json.type.md b/content/commands/json.type.md index afeaa6a84f..f189bebec7 100644 --- a/content/commands/json.type.md +++ b/content/commands/json.type.md @@ -52,11 +52,6 @@ is JSONPath to specify. Default is root `$`. Returns null if the `key` or `path` -## Return - -JSON.TYPE returns an array of string replies for each path, specified as the value's type. -For more information about replies, see [Redis serialization protocol specification]({{< relref "/develop/reference/protocol-spec" >}}). - ## Examples {{< highlight bash >}} @@ -71,6 +66,24 @@ redis> JSON.TYPE doc $..dummy (empty array) {{< / highlight >}} +## Return information + +{{< multitabs id="json-type-return-info" + tab1="RESP2" + tab2="RESP3" >}} + +With `$`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}), where each element is the type of the matching value. + +With `.`-based path argument: [Bulk string reply]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the type of the matching value. + +-tab-sep- + +With `$`-based path argument (default): [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [array replies]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}), where each nested array contains the type of the matching value. + +With `.`-based path argument: [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) representing the type of the matching value. + +{{< /multitabs >}} + ## See also [`JSON.SET`]({{< relref "commands/json.set/" >}}) | [`JSON.ARRLEN`]({{< relref "commands/json.arrlen/" >}}) diff --git a/content/commands/xclaim.md b/content/commands/xclaim.md index e309cd6e9f..6ce57475e9 100644 --- a/content/commands/xclaim.md +++ b/content/commands/xclaim.md @@ -129,7 +129,7 @@ useful to normal users: 1. `IDLE `: Set the idle time (last time it was delivered) of the message. If IDLE is not specified, an IDLE of 0 is assumed, that is, the time count is reset because the message has now a new owner trying to process it. 2. `TIME `: This is the same as IDLE but instead of a relative amount of milliseconds, it sets the idle time to a specific Unix time (in milliseconds). This is useful in order to rewrite the AOF file generating `XCLAIM` commands. -3. `RETRYCOUNT `: Set the retry counter to the specified value. This counter is incremented every time a message is delivered again. Normally `XCLAIM` does not alter this counter, which is just served to clients when the XPENDING command is called: this way clients can detect anomalies, like messages that are never processed for some reason after a big number of delivery attempts. +3. `RETRYCOUNT `: Set the retry counter to the specified value. If not set, `XCLAIM` will increment the retry counter every time a message is delivered again. 4. `FORCE`: Creates the pending message entry in the PEL even if certain specified IDs are not already in the PEL assigned to a different client. However the message must be exist in the stream, otherwise the IDs of non existing messages are ignored. 5. `JUSTID`: Return just an array of IDs of messages successfully claimed, without returning the actual message. Using this option means the retry counter is not incremented. diff --git a/content/develop/ai/notebook-collection.md b/content/develop/ai/notebook-collection.md index fdda12ad1a..46cf390199 100644 --- a/content/develop/ai/notebook-collection.md +++ b/content/develop/ai/notebook-collection.md @@ -20,18 +20,26 @@ weight: 40 | Implementing hybrid search with Redis | Hybrid and Vector Search | Combines vector similarity with keyword filters. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/vector-search/02_hybrid_search.ipynb) | | Vector search with Redis Python client | Hybrid and Vector Search | Demonstrates pure vector search using the Redis Python client. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/vector-search/00_redispy.ipynb) | | Vector search with Redis Vector Library | Hybrid and Vector Search | Uses RedisVL for advanced vector indexing and querying. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/vector-search/01_redisvl.ipynb) | +| Shows how to convert a float32 index to float16 or integer data types | Hybrid and Vector Search | Demonstrates data type optimization for vector indices. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/vector-search/03_dtype_support.ipynb) | | RAG from scratch with Redis Vector Library | RAG | Basic RAG implementation using RedisVL. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/01_redisvl.ipynb) | | RAG using Redis and LangChain | RAG | Shows integration between Redis and LangChain for RAG. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/02_langchain.ipynb) | | RAG using Redis and LlamaIndex | RAG | Walkthrough of RAG with Redis and LlamaIndex. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/03_llamaindex.ipynb) | | Advanced RAG with RedisVL | RAG | Advanced concepts and techniques using RedisVL. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/04_advanced_redisvl.ipynb) | | RAG using Redis and Nvidia | RAG | NVIDIA + Redis for LLM context retrieval. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/05_nvidia_ai_rag_redis.ipynb) | | Utilize RAGAS framework to evaluate RAG performance | RAG | Evaluation of RAG apps using the RAGAS framework. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/06_ragas_evaluation.ipynb) | +| Implement a simple RBAC policy with vector search using Redis | RAG | Role-based access control implementation for RAG systems. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/07_user_role_based_rag.ipynb) | | LangGraph and agents | Agents | Getting started with agent workflows. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/agents/00_langgraph_redis_agentic_rag.ipynb) | | Movie recommendation system | Agents | Collaborative agent-based movie recommender. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/agents/01_crewai_langgraph_redis.ipynb) | +| Full-Featured Agent Architecture | Agents | Comprehensive agent implementation with advanced features. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/agents/02_full_featured_agent.ipynb) | +| Optimize semantic cache threshold with RedisVL | Semantic Cache | Performance optimization for semantic caching systems. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/semantic-cache/02_semantic_cache_optimization.ipynb) | +| Simple examples of how to build an allow/block list router in addition to a multi-topic router | Semantic Router | Basic routing patterns and access control mechanisms. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/semantic-router/00_semantic_routing.ipynb) | +| Use `RouterThresholdOptimizer` from RedisVL to setup best router config | Semantic Router | Router configuration optimization using RedisVL. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/semantic-router/01_routing_optimization.ipynb) | | Facial recognition | Computer Vision | Face matching using Facenet and RedisVL. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/computer-vision/00_facial_recognition_facenet.ipynb) | | Content filtering with RedisVL | Recommendation Systems | Introduction to content-based filtering. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/recommendation-systems/00_content_filtering.ipynb) | | Collaborative filtering with RedisVL | Recommendation Systems | Intro to collaborative filtering with RedisVL. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/recommendation-systems/01_collaborative_filtering.ipynb) | -| Advanced RAG example | Best Practices | Demonstrates mature RAG implementation patterns. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/04_advanced_redisvl.ipynb) | +| Intro deep learning two tower example with RedisVL | Recommendation Systems | Deep learning approach to recommendation systems. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/recommendation-systems/02_two_towers.ipynb) | +| Credit scoring system using Feast with Redis as the online store | Feature Store | Feature store implementation for ML model serving. | [Open in Colab](https://colab.research.google.com/github/redis-developer/redis-ai-resources/blob/main/python-recipes/feature-store/00_feast_credit_score.ipynb) | + ## Additional resources diff --git a/content/embeds/rs-prometheus-metrics-v2.md b/content/embeds/rs-prometheus-metrics-v2.md index e46465957f..15e38988b0 100644 --- a/content/embeds/rs-prometheus-metrics-v2.md +++ b/content/embeds/rs-prometheus-metrics-v2.md @@ -113,9 +113,11 @@ | redis_server_blocked_clients | Count the clients waiting on a blocking call | | redis_server_connected_clients | Number of client connections to the specific shard | | redis_server_connected_slaves | Number of connected replicas | -| redis_server_db0_avg_ttl | Average TTL of all volatile keys | +| redis_server_db_avg_ttl | Average TTL of all volatile keys | +| redis_server_db0_avg_ttl | Average TTL of all volatile keys. Deprecated. | | redis_server_expired_keys | Total count of volatile keys | -| redis_server_db0_keys | Total key count | +| redis_server_db_keys | Total key count. | +| redis_server_db0_keys | Total key count. Deprecated. | | redis_server_evicted_keys | Keys evicted so far (since restart) | | redis_server_expire_cycle_cpu_milliseconds | The cumulative amount of time spent on active expiry cycles | | redis_server_expired_keys | Keys expired so far (since restart) | @@ -214,4 +216,4 @@ 1. Available since RediSearch 2.6. 2. Available since RediSearch 2.8. -3. Available since RediSearch 8.0. \ No newline at end of file +3. Available since RediSearch 8.0. diff --git a/content/integrate/redis-mcp/client-conf.md b/content/integrate/redis-mcp/client-conf.md index 99fa4d6602..7f4d0db82f 100644 --- a/content/integrate/redis-mcp/client-conf.md +++ b/content/integrate/redis-mcp/client-conf.md @@ -48,6 +48,7 @@ give the general configuration details for some common MCP client tools: - [Claude Desktop](https://modelcontextprotocol.io/quickstart/user) - [GitHub Copilot for VS Code](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) - [OpenAI](https://openai.github.io/openai-agents-python/mcp/) +- [Augment](https://docs.augmentcode.com/setup-augment/mcp) ### Local servers @@ -124,6 +125,18 @@ configuration as shown below: } ``` +For Augment in VS Code or JetBrains IDEs, you can also add the configuration +from the Settings panel. + +Open the **Settings** panel using the menu +in the top right corner of the main Augment panel. In the **Tools** +settings, scroll down to the **MCP** section and select **Add MCP**. +Enter `Redis` in the name field and paste appropriate command line in the +command field (see +[Configuration]({{< relref "/integrate/redis-mcp/install#configuration" >}}) +for more information about the command line options). You can also add any +[environment variables]({{< relref "/integrate/redis-mcp/install#environment-variables" >}}) that you need. + ## Redis Cloud MCP If you are using diff --git a/content/integrate/redis-mcp/install.md b/content/integrate/redis-mcp/install.md index 720c9e9e64..e9b500d035 100644 --- a/content/integrate/redis-mcp/install.md +++ b/content/integrate/redis-mcp/install.md @@ -118,7 +118,9 @@ See the [`.env.example` file](https://github.com/redis/mcp-redis/blob/main/.env. in the repository for the full list of variables and their default values. You can also set the configuration using command-line arguments, which -may be useful if you only want to change a few settings from the defaults: +may be useful if you only want to change a few settings from the defaults +(see [Command line options](#command-line-options) below for the full list +of options). ```bash # Basic Redis connection @@ -139,25 +141,47 @@ uvx --from git+https://github.com/redis/mcp-redis.git redis-mcp-server \ uvx --from git+https://github.com/redis/mcp-redis.git redis-mcp-server --help ``` +{{< note >}}The command-line options take precedence over the environment variables. +{{< /note >}} + ### Environment variables The full set of environment variables is shown in the table below: -| Name | Description | Default Value | -|----------------------|-----------------------------------------------------------|---------------| -| `REDIS_HOST` | Redis IP or hostname | `"127.0.0.1"` | -| `REDIS_PORT` | Redis port | `6379` | +| Name | Description | Default Value | +|----------------------|-----------------------------|---------------| +| `REDIS_HOST` | Redis IP or hostname | `"127.0.0.1"` | +| `REDIS_PORT` | Redis port | `6379` | | `REDIS_DB` | Database | 0 | -| `REDIS_USERNAME` | Database username | `"default"` | -| `REDIS_PWD` | Database password | "" | -| `REDIS_SSL` | Enables or disables SSL/TLS | `False` | -| `REDIS_CA_PATH` | CA certificate for verifying server | None | +| `REDIS_USERNAME` | Database username | `"default"` | +| `REDIS_PWD` | Database password | "" | +| `REDIS_SSL` | Enables or disables SSL/TLS | `False` | +| `REDIS_CA_PATH` | CA certificate for verifying server | None | | `REDIS_SSL_KEYFILE` | Client's private key file for client authentication | None | | `REDIS_SSL_CERTFILE` | Client's certificate file for client authentication | None | | `REDIS_CERT_REQS` | Whether the client should verify the server's certificate | `"required"` | | `REDIS_CA_CERTS` | Path to the trusted CA certificates file | None | | `REDIS_CLUSTER_MODE` | Enable Redis Cluster mode | `False` | -| `MCP_TRANSPORT` | Use the `stdio` or `sse` transport | `stdio` | + +### Command line options + +The full set of command line options is shown in the table below: + +| Name | Description | Default Value | +|----------------------|-----------------|---------------| +| `--url` | Redis URL (`redis://user:pass@host:port/db`) | | +| `--host` | Redis IP or hostname | `"127.0.0.1"` | +| `--port` | Redis port | `6379` | +| `--db` | Database | 0 | +| `--username` | Database username | `"default"` | +| `--password` | Database password | | +| `--ssl` | Enables or disables SSL/TLS | `False` | +| `--ssl-ca-path` | CA certificate for verifying server | None | +| `--ssl-keyfile` | Client's private key file for client authentication | | +| `--ssl-certfile` | Client's certificate file for client authentication | | +| `--ssl-cert-reqs` | Whether the client should verify the server's certificate | `"required"` | +| `--ssl-ca-certs` | Path to the trusted CA certificates file | | +| `--cluster-mode` | Enable Redis Cluster mode | `False` | ## Redis Cloud MCP diff --git a/content/operate/_index.md b/content/operate/_index.md index 6647c281a5..4502d01e03 100644 --- a/content/operate/_index.md +++ b/content/operate/_index.md @@ -27,7 +27,7 @@ hideListLinks: true | Redis Flex/Auto tiering | [Create a Redis Flex database]({{< relref "/operate/rc/databases/create-database/create-flex-database" >}}) | [Auto Tiering]({{}}) | | [Auto Tiering]({{}}) | | Persistence | [Data persistence]({{< relref "/operate/rc/databases/configuration/data-persistence" >}}) | [Persistence]({{}}) | [Persistence]({{< relref "/operate/oss_and_stack/management/replication" >}}) | [Persistence volumes]({{}})| | Recovery | Automatic | [Recover cluster]({{}}) | [Manual failover]({{< relref "/operate/oss_and_stack/management/scaling#manual-failover" >}}) | [Cluster recovery]({{}}) | -| Backups | [Back up a database]({{< relref "/operate/rc/databases/back-up-data" >}}) | [Schedule backups]({{}}) | [Persistence]({{< relref "/operate/oss_and_stack/management/replication" >}}) | [REDB spec.backup]({{}}) | +| Backups | [Back up a database]({{< relref "/operate/rc/databases/back-up-data" >}}) | [Schedule backups]({{}}) | [Persistence]({{< relref "/operate/oss_and_stack/management/replication" >}}) | [REDB spec.backup]({{}}) | ### Logging and monitoring @@ -36,7 +36,7 @@ hideListLinks: true |:-----------|:--------------|:-----------|:--------------|:--------------| | Monitoring | [Monitor performance]({{< relref "/operate/rc/databases/monitor-performance" >}}) | [Monitoring]({{}}) | [INFO]({{< relref "/commands/info" >}}), [MONITOR]({{< relref "/commands/monitor" >}}), and [LATENCY DOCTOR]({{< relref "/commands/latency-doctor" >}})
[Analysis with Redis Insight]({{< relref "/develop/tools/insight#database-analysis" >}}) | [Export metrics to Prometheus]({{}}) | | Logging | [System logs]({{< relref "/operate/rc/logs-reports/system-logs" >}}) | [Logging]({{}}) | `/var/log/redis/redis.log`
[SLOWLOG]({{< relref "/commands/slowlog" >}})
[Keyspace notifications]({{< relref "/develop/pubsub/keyspace-notifications" >}}) | [Logs]({{}}) | -| Alerts | [Alerts]({{< relref "/operate/rc/databases/view-edit-database#alerts-section" >}}) | [Alerts and events]({{}}) | [Pub/sub with Redis Sentinel]({{< relref "/operate/oss_and_stack/management/sentinel#pubsub-messages" >}}) | [REDB alertSettings]({{}}) | +| Alerts | [Alerts]({{< relref "/operate/rc/databases/view-edit-database#alerts-section" >}}) | [Alerts and events]({{}}) | [Pub/sub with Redis Sentinel]({{< relref "/operate/oss_and_stack/management/sentinel#pubsub-messages" >}}) | [REDB alertSettings]({{}}) | | Support | [Contact support](https://redis.io/support/) | [Create support package]({{}}) | | [Contact support](https://redis.io/support/) | ### Security @@ -44,7 +44,7 @@ hideListLinks: true | | {{}} Redis Cloud | {{}} Redis Software | {{}} Redis Open Source |
Redis for
Kubernetes | |:-----------|:--------------|:-----------|:--------------|:--------------| -| Transport Layer Security (TLS) | [TLS]({{}}) | [TLS]({{}}) | [TLS]({{< relref "/operate/oss_and_stack/management/security/encryption" >}}) | [REDB tlsMode]({{}}) | +| Transport Layer Security (TLS) | [TLS]({{}}) | [TLS]({{}}) | [TLS]({{< relref "/operate/oss_and_stack/management/security/encryption" >}}) | [REDB tlsMode]({{}}) | | Role-based access control (RBAC) | [Role-based access control]({{}}) | [Access control]({{}}) | [Access control list]({{< relref "/operate/oss_and_stack/management/security/acl" >}}) | [REC credentials]({{}}) | | Lightweight Directory Access Protocol (LDAP) | | [LDAP authentication]({{}}) | | [Enable LDAP]({{}}) | | Single sign-on (SSO) | [SAML SSO]({{< relref "/operate/rc/security/access-control/saml-sso" >}}) | | | | diff --git a/content/operate/kubernetes/7.4.6/architecture/_index.md b/content/operate/kubernetes/7.4.6/architecture/_index.md index 18fc4f323d..65762088fd 100644 --- a/content/operate/kubernetes/7.4.6/architecture/_index.md +++ b/content/operate/kubernetes/7.4.6/architecture/_index.md @@ -10,6 +10,7 @@ description: This section provides an overview of the architecture and considera hideListLinks: true linkTitle: Architecture weight: 11 +aliases: [/operate/kubernetes/7.4.6/architecture/operator/, /operate/kubernetes/7.4.6/faqs/] url: '/operate/kubernetes/7.4.6/architecture/' --- Redis bases its Kubernetes architecture on several vital concepts. diff --git a/content/operate/kubernetes/7.4.6/deployment/_index.md b/content/operate/kubernetes/7.4.6/deployment/_index.md index 05ac4ec30f..e585565180 100644 --- a/content/operate/kubernetes/7.4.6/deployment/_index.md +++ b/content/operate/kubernetes/7.4.6/deployment/_index.md @@ -11,6 +11,7 @@ description: This section lists the different ways to set up and run Redis Enter hideListLinks: false linkTitle: Deployment weight: 11 +aliases: [/operate/kubernetes/7.4.6/deployment/deployment-options/, /operate/kubernetes/7.4.6/deployment/helm/] url: '/operate/kubernetes/7.4.6/deployment/' --- diff --git a/content/operate/kubernetes/7.4.6/security/_index.md b/content/operate/kubernetes/7.4.6/security/_index.md index bb70541417..5a13e606d1 100644 --- a/content/operate/kubernetes/7.4.6/security/_index.md +++ b/content/operate/kubernetes/7.4.6/security/_index.md @@ -9,6 +9,7 @@ description: Security settings and configuration for Redis Enterprise for Kubern hideListLinks: false linkTitle: Security weight: 50 +aliases: [/operate/kubernetes/7.4.6/security/allow-resource-adjustment/] url: '/operate/kubernetes/7.4.6/security/' --- diff --git a/content/operate/kubernetes/7.8.4/architecture/_index.md b/content/operate/kubernetes/7.8.4/architecture/_index.md index 974eb32d9f..e85e5dd384 100644 --- a/content/operate/kubernetes/7.8.4/architecture/_index.md +++ b/content/operate/kubernetes/7.8.4/architecture/_index.md @@ -9,7 +9,7 @@ description: Overview of the architecture and components of Redis Enterprise for hideListLinks: true linkTitle: Architecture weight: 1 -aliases: [operate/platforms/kubernetes/kubernetes-architecture/] +aliases: [operate/platforms/kubernetes/kubernetes-architecture/, /operate/kubernetes/7.8.4/architecture/operator/, /operate/kubernetes/7.8.4/faqs/] url: '/operate/kubernetes/7.8.4/architecture/' --- diff --git a/content/operate/kubernetes/7.8.4/deployment/_index.md b/content/operate/kubernetes/7.8.4/deployment/_index.md index 79673b5ccf..9057890864 100644 --- a/content/operate/kubernetes/7.8.4/deployment/_index.md +++ b/content/operate/kubernetes/7.8.4/deployment/_index.md @@ -11,6 +11,7 @@ description: This section lists the different ways to set up and run Redis Enter hideListLinks: false linkTitle: Deployment weight: 11 +aliases: [/operate/kubernetes/7.8.4/deployment/helm/] url: '/operate/kubernetes/7.8.4/deployment/' --- diff --git a/content/operate/kubernetes/7.8.4/re-clusters/_index.md b/content/operate/kubernetes/7.8.4/re-clusters/_index.md index 14ccc9ae43..6b5d8a0070 100644 --- a/content/operate/kubernetes/7.8.4/re-clusters/_index.md +++ b/content/operate/kubernetes/7.8.4/re-clusters/_index.md @@ -9,6 +9,7 @@ description: Articles to help you manage your Redis Enterprise clusters (REC). hideListLinks: false linkTitle: Redis Enterprise clusters (REC) weight: 30 +aliases: [/operate/kubernetes/7.8.4/delete-custom-resources/] url: '/operate/kubernetes/7.8.4/re-clusters/' --- diff --git a/content/operate/kubernetes/7.8.4/re-databases/replica-redb.md b/content/operate/kubernetes/7.8.4/re-databases/replica-redb.md index 4ab8029851..a46f77cb6e 100644 --- a/content/operate/kubernetes/7.8.4/re-databases/replica-redb.md +++ b/content/operate/kubernetes/7.8.4/re-databases/replica-redb.md @@ -12,7 +12,7 @@ url: '/operate/kubernetes/7.8.4/re-databases/replica-redb/' --- You can configure a replica of a database by creating an item in -the [`replicaSources`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB) custom resource. +the [`replicaSources`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB) custom resource. A secret must be created with the `stringData` section containing the replica source URI as follows: diff --git a/content/operate/kubernetes/7.8.4/reference/_index.md b/content/operate/kubernetes/7.8.4/reference/_index.md index 04d65031b7..4b43bc3e60 100644 --- a/content/operate/kubernetes/7.8.4/reference/_index.md +++ b/content/operate/kubernetes/7.8.4/reference/_index.md @@ -10,6 +10,7 @@ description: Reference material for the operator, cluster, and database deployme hideListLinks: false linkTitle: Reference weight: 89 +aliases: [/operate/kubernetes/7.8.4/reference/supported_k8s_distributions/] url: '/operate/kubernetes/7.8.4/reference/' --- diff --git a/content/operate/kubernetes/7.8.4/security/_index.md b/content/operate/kubernetes/7.8.4/security/_index.md index d260b07783..d0fa376570 100644 --- a/content/operate/kubernetes/7.8.4/security/_index.md +++ b/content/operate/kubernetes/7.8.4/security/_index.md @@ -9,6 +9,7 @@ description: Security settings and configuration for Redis Enterprise for Kubern hideListLinks: false linkTitle: Security weight: 50 +aliases: [/operate/kubernetes/7.8.4/security/allow-resource-adjustment/] url: '/operate/kubernetes/7.8.4/security/' --- diff --git a/content/operate/kubernetes/7.8.6/architecture/_index.md b/content/operate/kubernetes/7.8.6/architecture/_index.md index 8ae31f61c8..d2c54b5bca 100644 --- a/content/operate/kubernetes/7.8.6/architecture/_index.md +++ b/content/operate/kubernetes/7.8.6/architecture/_index.md @@ -9,6 +9,7 @@ description: Overview of the architecture and components of Redis Enterprise for hideListLinks: true linkTitle: Architecture weight: 1 +aliases: [/operate/kubernetes/7.8.6/architecture/operator/] url: '/operate/kubernetes/7.8.6/architecture/' --- diff --git a/content/operate/kubernetes/7.8.6/re-clusters/_index.md b/content/operate/kubernetes/7.8.6/re-clusters/_index.md index 4a6bf0f6cb..8eebd59857 100644 --- a/content/operate/kubernetes/7.8.6/re-clusters/_index.md +++ b/content/operate/kubernetes/7.8.6/re-clusters/_index.md @@ -9,6 +9,7 @@ description: Articles to help you manage your Redis Enterprise clusters (REC). hideListLinks: false linkTitle: Redis Enterprise clusters (REC) weight: 30 +aliases: [/operate/kubernetes/7.8.6/delete-custom-resources/] url: '/operate/kubernetes/7.8.6/re-clusters/' --- diff --git a/content/operate/kubernetes/7.8.6/re-databases/replica-redb.md b/content/operate/kubernetes/7.8.6/re-databases/replica-redb.md index df0a50747f..ac16160b1f 100644 --- a/content/operate/kubernetes/7.8.6/re-databases/replica-redb.md +++ b/content/operate/kubernetes/7.8.6/re-databases/replica-redb.md @@ -12,7 +12,7 @@ url: '/operate/kubernetes/7.8.6/re-databases/replica-redb/' --- You can configure a replica of a database by creating an item in -the [`replicaSources`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB)custom resource. +the [`replicaSources`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB)custom resource. A secret must be created with the `stringData` section containing the replica source URI as follows: diff --git a/content/operate/kubernetes/7.8.6/security/_index.md b/content/operate/kubernetes/7.8.6/security/_index.md index 569ba00477..bb7d1268be 100644 --- a/content/operate/kubernetes/7.8.6/security/_index.md +++ b/content/operate/kubernetes/7.8.6/security/_index.md @@ -9,6 +9,7 @@ description: Security settings and configuration for Redis Enterprise for Kubern hideListLinks: false linkTitle: Security weight: 50 +aliases: [/operate/kubernetes/7.8.6/security/allow-resource-adjustment/] url: '/operate/kubernetes/7.8.6/security/' --- diff --git a/content/operate/kubernetes/_index.md b/content/operate/kubernetes/_index.md index ec07f093f9..bd84a6b4c1 100644 --- a/content/operate/kubernetes/_index.md +++ b/content/operate/kubernetes/_index.md @@ -41,7 +41,7 @@ Create and manage [Redis Enterprise clusters]({{< relref "/operate/kubernetes/re - [Auto Tiering]({{< relref "/operate/kubernetes/re-clusters/auto-tiering" >}}) - [Multi-namespace deployment]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}) - [Cluster recovery]({{< relref "/operate/kubernetes/re-clusters/cluster-recovery" >}}) -- [REC API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) +- [REC API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) ## Redis Enterprise databases (REDB) @@ -49,7 +49,7 @@ Create and manage [Redis Enterprise databases]({{< relref "/operate/kubernetes/r - [Database controller]({{< relref "/operate/kubernetes/re-databases/db-controller" >}}) - [Create replica databases]({{< relref "/operate/kubernetes/re-databases/replica-redb" >}}) -- [REDB API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}) +- [REDB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) ## Active-Active databases @@ -58,8 +58,8 @@ Set up globally distributed [Active-Active databases]({{< relref "/operate/kuber - [Prepare participating clusters]({{< relref "/operate/kubernetes/active-active/prepare-clusters" >}}) - [Create Active-Active database]({{< relref "/operate/kubernetes/active-active/create-reaadb" >}}) - [Global configuration]({{< relref "/operate/kubernetes/active-active/global-config" >}}) -- [REAADB API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_active_active_database_api" >}}) -- [Remote cluster API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_remote_cluster_api" >}}) +- [REAADB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api" >}}) +- [Remote cluster API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api" >}}) ## Security @@ -74,10 +74,10 @@ Manage [secure connections]({{< relref "/operate/kubernetes/security" >}}) and a Use the Kubernetes API and command-line tools to manage your Redis Enterprise deployment. -- [Redis Enterprise cluster API (REC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) -- [Redis Enterprise database API (REDB)]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}) -- [Active-Active database API (REAADB)]({{< relref "/operate/kubernetes/reference/redis_enterprise_active_active_database_api" >}}) -- [Remote cluster API (RERC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_remote_cluster_api" >}}) +- [Redis Enterprise cluster API (REC)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) +- [Redis Enterprise database API (REDB)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) +- [Active-Active database API (REAADB)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api" >}}) +- [Remote cluster API (RERC)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api" >}}) ## Logs & monitoring diff --git a/content/operate/kubernetes/active-active/_index.md b/content/operate/kubernetes/active-active/_index.md index 791c178aca..d34689c325 100644 --- a/content/operate/kubernetes/active-active/_index.md +++ b/content/operate/kubernetes/active-active/_index.md @@ -77,13 +77,13 @@ If you are using a preview version of these features (operator version 6.4.2-4 o Redis Enterprise Active-Active database (REAADB) contains a link to the RERC for each participating cluster, and provides configuration and status to the management plane. -For a full list of fields and options, see the [REAADB API reference]({{}}). +For a full list of fields and options, see the [REAADB API reference]({{}}). ### RERC custom resource Redis Enterprise remote cluster (RERC) custom resource contains configuration details for all the participating clusters. -For a full list of fields and options, see the [RERC API reference]({{}}). +For a full list of fields and options, see the [RERC API reference]({{}}). ### Limitations diff --git a/content/operate/kubernetes/active-active/create-aa-crdb-cli.md b/content/operate/kubernetes/active-active/create-aa-crdb-cli.md index c5e9864e9e..bf6c86d8d6 100644 --- a/content/operate/kubernetes/active-active/create-aa-crdb-cli.md +++ b/content/operate/kubernetes/active-active/create-aa-crdb-cli.md @@ -27,7 +27,7 @@ This process consists of: Before creating Active-Active databases, you'll need admin access to two or more working Kubernetes clusters that each have: - Routing for external access with an [ingress resources]({{< relref "/operate/kubernetes/networking/ingress" >}}) (or [route resources]({{< relref "/operate/kubernetes/networking/routes" >}}) on OpenShift). -- A working [Redis Enterprise cluster (REC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) with a unique name. +- A working [Redis Enterprise cluster (REC)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) with a unique name. - Enough memory resources available for the database (see [hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements" >}})). {{}} The `activeActive` field and the `ingressOrRouteSpec` field cannot coexist in the same REC. If you configured your ingress via the `ingressOrRouteSpec` field in the REC, create your Active-Active database with the RedisEnterpriseActiveActiveDatabase (REAADB) custom resource.{{}} diff --git a/content/operate/kubernetes/active-active/create-reaadb.md b/content/operate/kubernetes/active-active/create-reaadb.md index 4297eadc32..1007950066 100644 --- a/content/operate/kubernetes/active-active/create-reaadb.md +++ b/content/operate/kubernetes/active-active/create-reaadb.md @@ -69,7 +69,7 @@ For a list of example values used throughout this article, see the [Example valu secretName: redis-enterprise-rerc-reagan ``` - For more details on RERC fields, see the [RERC API reference]({{}}). + For more details on RERC fields, see the [RERC API reference]({{}}). 1. Create a Redis Enterprise remote cluster from each RERC custom resource file. @@ -123,7 +123,7 @@ For a list of example values used throughout this article, see the [Example valu {{}}Sharding is disabled on Active-Active databases created with a `shardCount` of 1. Sharding cannot be enabled after database creation. {{}} - For more details on RERC fields, see the [RERC API reference]({{}}). + For more details on RERC fields, see the [RERC API reference]({{}}). 1. Create a Redis Enterprise Active-Active database from the REAADB custom resource file. diff --git a/content/operate/kubernetes/active-active/edit-rerc.md b/content/operate/kubernetes/active-active/edit-rerc.md index 5d6f442a81..f5a3bdbb7c 100644 --- a/content/operate/kubernetes/active-active/edit-rerc.md +++ b/content/operate/kubernetes/active-active/edit-rerc.md @@ -16,11 +16,11 @@ Before a RedisEnterpriseCluster (REC) can participate in an Active-Active databa The RERC controller periodically connects to the local REC endpoint via its external address, to ensure it’s setup correctly. For this to work, the external load balancer must support [NAT hairpinning](https://en.wikipedia.org/wiki/Network_address_translation#NAT_loopback). In some cloud environments, this may involve disabling IP preservation for the load balancer target groups. -For more details, see the [RERC API reference]({{}}). +For more details, see the [RERC API reference]({{}}). ## Edit RERC -Use the `kubectl patch rerc --type merge --patch` command to patch the local RERC custom resource with your changes. For a full list of available fields, see the [RERC API reference]({{}}). +Use the `kubectl patch rerc --type merge --patch` command to patch the local RERC custom resource with your changes. For a full list of available fields, see the [RERC API reference]({{}}). The following example edits the `dbFqdnSuffix` field for the RERC named `rerc-ohare`. diff --git a/content/operate/kubernetes/active-active/global-config.md b/content/operate/kubernetes/active-active/global-config.md index cb3d323d1c..f367dcd664 100644 --- a/content/operate/kubernetes/active-active/global-config.md +++ b/content/operate/kubernetes/active-active/global-config.md @@ -14,7 +14,7 @@ weight: 50 The Redis Enterprise Active-Active database (REAADB) custom resource contains the field `.spec.globalConfigurations`. This field sets configurations for the Active-Active database across all participating clusters, such as memory size, shard count, and the global database secrets. -The [REAADB API reference]({{}}) contains a full list of available fields. +The [REAADB API reference]({{}}) contains a full list of available fields. ## Edit global configurations @@ -46,7 +46,7 @@ The [REAADB API reference]({{}}). +This section edits the secrets under the REAADB `.spec.globalConfigurations` section. For more information and all available fields, see the [REAADB API reference]({{}}). 1. On an existing participating cluster, generate a YAML file containing the database secret with the relevant data. @@ -170,4 +170,4 @@ If you encounter issues with role permissions: - **Permission propagation failures**: Verify that the roles and ACLs are properly configured and accessible on each cluster. Remember that you must manually create identical roles and ACLs on every participating cluster. - **Case sensitivity issues**: Verify that role and ACL names match exactly, including capitalization, across all clusters. -For more details on the `rolesPermissions` field structure, see the [REAADB API reference]({{}}). \ No newline at end of file +For more details on the `rolesPermissions` field structure, see the [REAADB API reference]({{}}). \ No newline at end of file diff --git a/content/operate/kubernetes/architecture/_index.md b/content/operate/kubernetes/architecture/_index.md index 6db8b88c56..a0a19d4a9e 100644 --- a/content/operate/kubernetes/architecture/_index.md +++ b/content/operate/kubernetes/architecture/_index.md @@ -68,19 +68,19 @@ A Redis Enterprise cluster is a set of Redis Enterprise nodes pooling resources. {{< image filename="/images/k8s/k8s-node-arch.png">}} -A Redis cluster is created and managed by the [RedisEnterpriseCluster (REC)]({{}}) [custom resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). Changes to the REC configuration file prompt the operator to make changes to the cluster. The REC is required for both standard databases ([REDB](#redisenterprisedatabase-redb)) and Active-Active databases ([REAADB](#redisenterpriseactiveactivedatabase-reaadb)). +A Redis cluster is created and managed by the [RedisEnterpriseCluster (REC)]({{}}) [custom resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). Changes to the REC configuration file prompt the operator to make changes to the cluster. The REC is required for both standard databases ([REDB](#redisenterprisedatabase-redb)) and Active-Active databases ([REAADB](#redisenterpriseactiveactivedatabase-reaadb)). -See the [RedisEnterpriseCluster API Reference]({{}}) for a full list of fields and settings. +See the [RedisEnterpriseCluster API Reference]({{}}) for a full list of fields and settings. ## RedisEnterpriseDatabase REDB A Redis Enterprise database is a logical entity that manages your entire dataset across multiple Redis instances. A Redis instance is a single-threaded database process ([commonly referred to as a shard]({{}})). -Redis databases are created and managed by the [RedisEnterpriseDatabase (REDB)]({{}}) [custom resource (CR)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). Changes to the REDB YAML configuration file prompt the operator to make changes to the database. +Redis databases are created and managed by the [RedisEnterpriseDatabase (REDB)]({{}}) [custom resource (CR)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). Changes to the REDB YAML configuration file prompt the operator to make changes to the database. An operator can manage a database in the same namespace, or a different namespace. See ["Flexible deployment"]({{}}) options and ["Manage databases in multiple namespaces"]({{}}) for more information. -See the [RedisEnterpriseDatabase (REDB) API Reference]({{}}) for a full list of fields and settings. +See the [RedisEnterpriseDatabase (REDB) API Reference]({{}}) for a full list of fields and settings. ## Security @@ -88,7 +88,7 @@ Redis Enterprise for Kubernetes uses [secrets](https://kubernetes.io/docs/concep ### REC credentials -Redis Enterprise for Kubernetes uses the [RedisEnterpriseCluster (REC)]({{}}) [custom resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) to create a Redis Enterprise cluster. During creation it generates random credentials for the operator to use. The credentials are saved in a Kubernetes (K8s) [secret](https://kubernetes.io/docs/concepts/configuration/secret/). The secret name defaults to the name of the cluster. +Redis Enterprise for Kubernetes uses the [RedisEnterpriseCluster (REC)]({{}}) [custom resource](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) to create a Redis Enterprise cluster. During creation it generates random credentials for the operator to use. The credentials are saved in a Kubernetes (K8s) [secret](https://kubernetes.io/docs/concepts/configuration/secret/). The secret name defaults to the name of the cluster. See [Manage REC credentials]({{}}) for more details. @@ -126,11 +126,11 @@ By default, Kubernetes doesn't allow you to access your Redis database from outs - [Istio](https://istio.io/latest/docs/setup/getting-started/) requires `Gateway` and `VirtualService` API resources. - OpenShift uses [routes]({{< relref "/operate/kubernetes/networking/routes" >}}) to route external traffic. -The [Active-Active databases](#active-active-databases) require one of above routing methods to be configured in the REC with the [ingressOrRouteSpec field]({{}}). +The [Active-Active databases](#active-active-databases) require one of above routing methods to be configured in the REC with the [ingressOrRouteSpec field]({{}}). ## Services Rigger -The services rigger is responsible for creating and updating services related to database objects. It identifies database objects within the cluster and creates services in accordance with [`redisEnterpriseCluster.Spec.servicesRiggerSpec` setting]({{}}) to allow access to those databases. By default, each database has two services, a `cluster_ip` Service with the same name as the database and a `headless` Service with the same name as the database suffixed with `-headless`. It also creates other types of Services such as Ingress Services or OpenshiftRoutes (defined in `redisEnterpriseCluster.Spec.ingressOrRouteSpec`) meant to provide access to REAADB objects. +The services rigger is responsible for creating and updating services related to database objects. It identifies database objects within the cluster and creates services in accordance with [`redisEnterpriseCluster.Spec.servicesRiggerSpec` setting]({{}}) to allow access to those databases. By default, each database has two services, a `cluster_ip` Service with the same name as the database and a `headless` Service with the same name as the database suffixed with `-headless`. It also creates other types of Services such as Ingress Services or OpenshiftRoutes (defined in `redisEnterpriseCluster.Spec.ingressOrRouteSpec`) meant to provide access to REAADB objects. You can view a list of services with the `kubectl get services` command. @@ -144,15 +144,15 @@ For more details and installation information, see [Active-Active databases]({{< ## RedisEnterpriseRemoteCluster RERC -The [RedisEnterpriseRemoteCluster (RERC)]({{}}) contains details allowing the REC to link to the RedisEnterpriseActiveActiveDatabase (REAADB). The RERC resource is listed in the [REAADB](#redisenterpriseactiveactivedatabase-reaadb) resource to become a participating cluster for the Active-Active database. +The [RedisEnterpriseRemoteCluster (RERC)]({{}}) contains details allowing the REC to link to the RedisEnterpriseActiveActiveDatabase (REAADB). The RERC resource is listed in the [REAADB](#redisenterpriseactiveactivedatabase-reaadb) resource to become a participating cluster for the Active-Active database. -See the [RERC API reference]({{}}) for a full list of fields and settings. +See the [RERC API reference]({{}}) for a full list of fields and settings. ## RedisEnterpriseActiveActiveDatabase REAADB The RedisEnterpriseActiveActiveDatabase (REAADB) resource creates and manages a database that spans more than one Kubernetes cluster. An REAADB requires [external routing](#networking), at least two [RECs](#redisenterprisecluster-rec), and at least two [RERCs](#redisenterpriseremotecluster-rerc). -See the [REAADB API reference]({{}}) for a full list of fields and settings. +See the [REAADB API reference]({{}}) for a full list of fields and settings. ## Metrics diff --git a/content/operate/kubernetes/architecture/deployment-options.md b/content/operate/kubernetes/architecture/deployment-options.md index bee79fafc2..04e375ce9a 100644 --- a/content/operate/kubernetes/architecture/deployment-options.md +++ b/content/operate/kubernetes/architecture/deployment-options.md @@ -9,6 +9,7 @@ description: Redis Enterprise for Kubernetes allows you to deploy to multiple na This article describes flexible deployment options you can use to meet your specific needs. linkTitle: Deployment options +aliases: [/operate/kubernetes/deployment/deployment-options/] --- You can deploy Redis Enterprise for Kubernetes in several different ways depending on your database needs. diff --git a/content/operate/kubernetes/deployment/openshift/openshift-cli.md b/content/operate/kubernetes/deployment/openshift/openshift-cli.md index 64da74ae2d..0695b9e568 100644 --- a/content/operate/kubernetes/deployment/openshift/openshift-cli.md +++ b/content/operate/kubernetes/deployment/openshift/openshift-cli.md @@ -81,7 +81,7 @@ Versions 7.22.0-6 and later run in without permissions to [allow automatic resou 1. Apply the `RedisEnterpriseCluster` resource file ([rec_rhel.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/rec_rhel.yaml)). - You can rename the file to `.yaml`, but it is not required. Examples below use `.yaml`. [Options for Redis Enterprise clusters]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) has more info about the Redis Enterprise cluster (REC) custom resource, or see the [Redis Enterprise cluster API]({{}}) for a full list of options. + You can rename the file to `.yaml`, but it is not required. Examples below use `.yaml`. [Options for Redis Enterprise clusters]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) has more info about the Redis Enterprise cluster (REC) custom resource, or see the [Redis Enterprise cluster API]({{}}) for a full list of options. {{}} If you suspect your file descriptor limits are below 100,000, you must either manually increase limits or [Allow automatic resource adjustment]({{< relref "/operate/kubernetes/security/allow-resource-adjustment" >}}). Most major cloud providers and standard container runtime configurations set default file descriptor limits well above the minimum required by Redis Enterprise. In these environments, you can safely run without enabling automatic resource adjustment. @@ -199,7 +199,7 @@ The operator uses the instructions in the Redis Enterprise database (REDB) custo 1. Create a `RedisEnterpriseDatabase` custom resource. - This example creates a test database. For production databases, see [create a database]({{< relref "/operate/kubernetes/re-databases/db-controller.md#create-a-database" >}}) and [RedisEnterpriseDatabase API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). + This example creates a test database. For production databases, see [create a database]({{< relref "/operate/kubernetes/re-databases/db-controller.md#create-a-database" >}}) and [RedisEnterpriseDatabase API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}). ```sh cat << EOF > /tmp/redis-enterprise-database.yml @@ -220,5 +220,5 @@ The operator uses the instructions in the Redis Enterprise database (REDB) custo ## More info -- [Redis Enterprise cluster API]({{}}) -- [Redis Enterprise database API]({{}}) +- [Redis Enterprise cluster API]({{}}) +- [Redis Enterprise database API]({{}}) diff --git a/content/operate/kubernetes/deployment/quick-start.md b/content/operate/kubernetes/deployment/quick-start.md index 23bc34bb50..74d7fe557a 100644 --- a/content/operate/kubernetes/deployment/quick-start.md +++ b/content/operate/kubernetes/deployment/quick-start.md @@ -114,7 +114,7 @@ redis-enterprise-operator 1/1 1 1 0m36s A Redis Enterprise cluster (REC) is created from a `RedisEnterpriseCluster` custom resource that contains cluster specifications. -The following example creates a minimal Redis Enterprise cluster. See the [RedisEnterpriseCluster API reference]({{}}) for more information on the various options available. +The following example creates a minimal Redis Enterprise cluster. See the [RedisEnterpriseCluster API reference]({{}}) for more information on the various options available. {{}} If you suspect your file descriptor limits are below 100,000, you must either manually increase limits or [Allow automatic resource adjustment]({{< relref "/operate/kubernetes/security/allow-resource-adjustment" >}}). Most major cloud providers and standard container runtime configurations set default file descriptor limits well above the minimum required by Redis Enterprise. In these environments, you can safely run without enabling automatic resource adjustment. diff --git a/content/operate/kubernetes/logs/collect-logs.md b/content/operate/kubernetes/logs/collect-logs.md index 808649ea3c..c1cf71cf9b 100644 --- a/content/operate/kubernetes/logs/collect-logs.md +++ b/content/operate/kubernetes/logs/collect-logs.md @@ -13,29 +13,50 @@ weight: 89 The Redis Enterprise cluster (REC) log collector script ([`log_collector.py`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/log_collector/log_collector.py)) creates and fills a directory with the relevant logs for your environment. These logs will help the support team with troubleshooting. -As of version 6.2.18-3, the log collector tool has two modes: +The log collector tool has two modes: - **restricted** collects only resources and logs created by the operator and Redis Enterprise deployments - - This is the default for versions 6.2.18-3 and later - **all** collects everything from your environment - - This is the default mode for versions 6.2.12-1 and earlier {{}} This script requires Python 3.6 or later. {{}} +## Prerequisites + +Before running the log collector, ensure you have the appropriate RBAC permissions configured. See [Log collector RBAC examples]({{< relref "/operate/kubernetes/reference/yaml/log-collector-rbac" >}}) for detailed RBAC configuration instructions. + +## Collect logs + 1. Download the latest [`log_collector.py`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/log_collector/log_collector.py) file. +1. Ensure your `kubectl` or `oc` CLI is configured to access the Kubernetes cluster you want to collect logs from. + 1. Have a K8s administrator run the script on the system that runs your `kubectl` or `oc` commands. - - Pass `-n` parameter to run on a different namespace than the one you are currently on - - Pass `-m` parameter to change the log collector mode (`all` or `restricted`) - - Run with `-h` to see more options ```bash - python log_collector.py + python log_collector.py ``` - {{< note >}} If you get an error because the yaml module is not found, install the pyYAML module with `pip install pyyaml`. - {{< /note >}} +## Options +You can run `log_collector.py` with the following options: +| Option | Description | +|--------|-------------| +| `-n`, `--namespace` | Sets the namespace(s) to collect from. Can be set to a single namespace, or multiple namespaces (comma-separated). When left empty, will use the current context's namespace from kubeconfig. | +| `-o`, `--output_dir` | Sets the output directory. Defaults to current working directory. | +| `-a`, `--logs_from_all_pods` | Collect logs from all pods in the selected namespace(s), and otherwise collect only from the operator and pods run by the operator. | +| `-t`, `--timeout` | Time to wait for external commands to finish execution (Linux only). Defaults to 180s. Specify 0 to disable timeout. | +| `--k8s_cli` | The K8s cli client to use (kubectl/oc/auto-detect). Defaults to auto-detect (chooses between 'kubectl' and 'oc'). Full paths can also be used. | +| `-m`, `--mode` | Controls which resources are collected. In 'restricted' mode, only resources associated with the operator and have the label 'app=redis-enterprise' are collected. In 'all' mode, all resources are collected. Defaults to 'restricted' mode. | +| `--collect_istio` | Collect data from istio-system namespace to debug potential problems related to istio ingress method. | +| `--collect_empty_files` | Collect empty log files for missing resources. | +| `--helm_release_name` | Collect resources related to the given Helm release name. | +| `--collect_rbac_resources` | Temporary development flag. Collect all role based access control related custom resources. | +| `-h`, `--help` | Show help message and exit. | + +{{< note >}} If you get an error because the yaml module is not found, install the pyYAML module with `pip install pyyaml`. +{{< /note >}} 1. Upload the resulting `tar.gz` file containing all the logs to [Redis Support](https://support.redislabs.com/). + + diff --git a/content/operate/kubernetes/re-clusters/_index.md b/content/operate/kubernetes/re-clusters/_index.md index e1019e181e..cd88a90723 100644 --- a/content/operate/kubernetes/re-clusters/_index.md +++ b/content/operate/kubernetes/re-clusters/_index.md @@ -47,4 +47,4 @@ Handle cluster recovery and troubleshooting scenarios: - [Redis Enterprise databases (REDB)]({{< relref "/operate/kubernetes/re-databases" >}}) - Create and manage databases on your cluster - [Security]({{< relref "/operate/kubernetes/security" >}}) - Configure security settings for your cluster - [Networking]({{< relref "/operate/kubernetes/networking" >}}) - Set up networking and ingress for cluster access -- [REC API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) - Complete API specification for REC resources +- [REC API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) - Complete API specification for REC resources diff --git a/content/operate/kubernetes/re-clusters/auto-tiering.md b/content/operate/kubernetes/re-clusters/auto-tiering.md index 1c1b4fe4ed..b43dad8318 100644 --- a/content/operate/kubernetes/re-clusters/auto-tiering.md +++ b/content/operate/kubernetes/re-clusters/auto-tiering.md @@ -31,7 +31,7 @@ For more information on node storage, see [Node persistent and ephemeral storage ## Create a Redis Enterprise cluster -To deploy a Redis Enterprise cluster (REC) with Auto Tiering, you'll need to specify the following in the `redisOnFlashSpec` section of your [REC custom resource]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}): +To deploy a Redis Enterprise cluster (REC) with Auto Tiering, you'll need to specify the following in the `redisOnFlashSpec` section of your [REC custom resource]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}): - enable Auto Tiering (`enabled: true`) - flash storage driver (`bigStoreDriver`) diff --git a/content/operate/kubernetes/re-clusters/delete-custom-resources.md b/content/operate/kubernetes/re-clusters/delete-custom-resources.md index 6ec48ffd3d..3f8d0effd1 100644 --- a/content/operate/kubernetes/re-clusters/delete-custom-resources.md +++ b/content/operate/kubernetes/re-clusters/delete-custom-resources.md @@ -9,6 +9,7 @@ description: This article explains how to delete Redis Enterprise clusters and R Enterprise databases from your Kubernetes environment. linkTitle: Delete custom resources weight: 70 +aliases: [/operate/kubernetes/delete-custom-resources/] --- ## Multi-namespace management diff --git a/content/operate/kubernetes/re-databases/_index.md b/content/operate/kubernetes/re-databases/_index.md index 35ab03cece..732e85bbb6 100644 --- a/content/operate/kubernetes/re-databases/_index.md +++ b/content/operate/kubernetes/re-databases/_index.md @@ -50,6 +50,6 @@ Monitor database performance and troubleshoot issues: ## Related topics - [Redis Enterprise clusters (REC)]({{< relref "/operate/kubernetes/re-clusters" >}}) - Manage the underlying cluster infrastructure -- [REDB API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}) - Complete API specification for REDB resources -- [Active-Active database API]({{< relref "/operate/kubernetes/reference/redis_enterprise_active_active_database_api" >}}) - API reference for Active-Active databases -- [Remote cluster API]({{< relref "/operate/kubernetes/reference/redis_enterprise_remote_cluster_api" >}}) - API reference for remote cluster configurations +- [REDB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) - Complete API specification for REDB resources +- [Active-Active database API]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api" >}}) - API reference for Active-Active databases +- [Remote cluster API]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api" >}}) - API reference for remote cluster configurations diff --git a/content/operate/kubernetes/re-databases/db-controller.md b/content/operate/kubernetes/re-databases/db-controller.md index f5ef1345be..d0c0700724 100644 --- a/content/operate/kubernetes/re-databases/db-controller.md +++ b/content/operate/kubernetes/re-databases/db-controller.md @@ -84,7 +84,7 @@ To modify the database: ``` 1. Change the specification (only properties in `spec` section) and save the changes. - For more details, see [RedisEnterpriseDatabaseSpec](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_database_api.md#redisenterprisedatabasespec) or [Options for Redis Enterprise databases]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). + For more details, see [RedisEnterpriseDatabaseSpec](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_database_api.md#redisenterprisedatabasespec) or [Options for Redis Enterprise databases]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}). 1. Monitor the status to see when the changes take effect: diff --git a/content/operate/kubernetes/re-databases/replica-redb.md b/content/operate/kubernetes/re-databases/replica-redb.md index fea6e6aa31..d5df9b7523 100644 --- a/content/operate/kubernetes/re-databases/replica-redb.md +++ b/content/operate/kubernetes/re-databases/replica-redb.md @@ -11,7 +11,7 @@ weight: 42 --- You can configure a replica of a database by creating an item in -the [`replicaSources`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB) custom resource. +the [`replicaSources`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#specreplicasources" >}}) section of the RedisEnterpriseDatabase (REDB) custom resource. A secret must be created with the `stringData` section containing the replica source URI as follows: diff --git a/content/operate/kubernetes/recommendations/node-selection.md b/content/operate/kubernetes/recommendations/node-selection.md index d06eb693df..1e2e221e39 100644 --- a/content/operate/kubernetes/recommendations/node-selection.md +++ b/content/operate/kubernetes/recommendations/node-selection.md @@ -28,7 +28,7 @@ Here are the ways that you can control the pod scheduling: ## Using node selectors -The [`nodeSelector`]({{}}) +The [`nodeSelector`]({{}}) property of the cluster specification uses the same values and structures as the [Kubernetes `nodeSelector`](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector). In general, node labels are a simple way to make sure that specific nodes are used for Redis Enterprise pods. diff --git a/content/operate/kubernetes/reference/_index.md b/content/operate/kubernetes/reference/_index.md index 6a1196188c..6f6e504dbb 100644 --- a/content/operate/kubernetes/reference/_index.md +++ b/content/operate/kubernetes/reference/_index.md @@ -5,30 +5,30 @@ categories: - docs - operate - kubernetes -description: API reference and guides for managing Redis Enterprise custom resources on Kubernetes. +description: Resources to help you manage Redis Enterprise custom resources on Kubernetes. hideListLinks: true linkTitle: Reference weight: 89 --- -Reference documentation for Redis Enterprise custom resources, including API specifications and practical guides for creating, configuring, and managing Redis Enterprise deployments on Kubernetes. +This reference documentation covers Redis Enterprise custom resources, API specifications, and practical instructions for creating, configuring, and managing Redis Enterprise deployments on Kubernetes. -## Working with custom resources +## Work with custom resources -Redis Enterprise for Kubernetes uses custom resources to manage clusters and databases. You can create, modify, and delete these resources using standard Kubernetes tools. +Redis Enterprise for Kubernetes uses custom resources to manage clusters and databases. Use standard Kubernetes tools to create, modify, and delete these resources. -### Creating custom resources +### Create custom resources -Create custom resources using `kubectl apply` with YAML manifests: +Use `kubectl apply` with YAML manifests to create custom resources: ```bash kubectl apply -f my-redis-cluster.yaml kubectl apply -f my-redis-database.yaml ``` -### Viewing custom resources +### View custom resources -List and inspect existing custom resources: +Use these commands to list and inspect existing custom resources: ```bash # List Redis Enterprise clusters @@ -48,9 +48,9 @@ kubectl describe rec my-cluster kubectl describe redb my-database ``` -### Modifying custom resources +### Modify custom resources -Update custom resources by editing the YAML manifest and reapplying: +Edit the YAML manifest and reapply to update custom resources: ```bash # Edit and apply updated manifest @@ -61,43 +61,45 @@ kubectl edit rec my-cluster kubectl edit redb my-database ``` -### Deleting custom resources +## YAML examples -Remove custom resources when no longer needed: +Find complete YAML examples for common deployment scenarios: -```bash -kubectl delete redb my-database -kubectl delete rec my-cluster -``` +- [YAML examples]({{< relref "/operate/kubernetes/reference/yaml" >}}) - Ready-to-use YAML configurations for different deployment types + +### Example categories -**Important:** Always delete databases (REDB) before deleting the cluster (REC) to ensure proper cleanup. +- [Basic deployment]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment" >}}) - Essential YAML files for simple Redis Enterprise deployment +- [Rack awareness]({{< relref "/operate/kubernetes/reference/yaml/rack-awareness" >}}) - YAML examples for rack-aware deployments across availability zones +- [Active-Active]({{< relref "/operate/kubernetes/reference/yaml/active-active" >}}) - YAML examples for Active-Active databases across multiple clusters +- [Multi-namespace]({{< relref "/operate/kubernetes/reference/yaml/multi-namespace" >}}) - YAML examples for deploying across multiple namespaces ## API reference -Complete API specifications for all Redis Enterprise custom resources: +Review complete API specifications for all Redis Enterprise custom resources: ### Core resources -- [Redis Enterprise cluster API (REC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) - Manage Redis Enterprise clusters -- [Redis Enterprise database API (REDB)]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}) - Manage Redis databases +- [Redis Enterprise cluster API (REC)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) - Manage Redis Enterprise clusters +- [Redis Enterprise database API (REDB)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) - Manage Redis databases ### Active-Active resources -- [Active-Active database API (REAADB)]({{< relref "/operate/kubernetes/reference/redis_enterprise_active_active_database_api" >}}) - Manage Active-Active databases -- [Remote cluster API (RERC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_remote_cluster_api" >}}) - Configure remote cluster connections +- [Active-Active database API (REAADB)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api" >}}) - Manage Active-Active databases +- [Remote cluster API (RERC)]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api" >}}) - Configure remote cluster connections ## Compatibility -Information about supported Kubernetes distributions and versions: +Check supported Kubernetes distributions and versions: - [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) - Compatible Kubernetes platforms and versions ## Best practices -When working with custom resources: +Follow these best practices when working with custom resources: - **Use version control**: Store your YAML manifests in version control systems - **Validate before applying**: Use `kubectl apply --dry-run=client` to validate changes -- **Monitor resource status**: Check resource status after applying changes +- **Monitor resource status**: Check resource status after you apply changes - **Follow naming conventions**: Use consistent naming for easier management - **Document configurations**: Add annotations and labels to describe resource purpose \ No newline at end of file diff --git a/content/operate/kubernetes/reference/api/_index.md b/content/operate/kubernetes/reference/api/_index.md new file mode 100644 index 0000000000..6c165ea70a --- /dev/null +++ b/content/operate/kubernetes/reference/api/_index.md @@ -0,0 +1,56 @@ +--- +title: API reference +categories: +- docs +- operate +- kubernetes +linkTitle: API reference +description: Reference documentation for Redis Enterprise operator APIs +weight: 30 +alwaysopen: false +hideListLinks: true +aliases: +--- + +The Redis Enterprise operator provides Kubernetes custom resource definitions (CRDs) that let you manage Redis Enterprise clusters and databases declaratively. This section contains the complete API reference for all operator resources. + +## API versions and stability + +The operator uses different API versions to indicate stability and feature maturity: + +- **`app.redislabs.com/v1`** - Stable APIs for production use +- **`app.redislabs.com/v1alpha1`** - Alpha APIs that may change in future releases + +## Custom resources + +| Resource | API Version | Purpose | +|----------|-------------|---------| +| [RedisEnterpriseCluster (REC)](redis_enterprise_cluster_api) | `v1` | Manages Redis Enterprise cluster deployments | +| [RedisEnterpriseDatabase (REDB)](redis_enterprise_database_api) | `v1alpha1` | Creates and configures Redis databases | +| [RedisEnterpriseActiveActiveDatabase (REAADB)](redis_enterprise_active_active_database_api) | `v1alpha1` | Sets up active-active databases across clusters | +| [RedisEnterpriseRemoteCluster (RERC)](redis_enterprise_remote_cluster_api) | `v1alpha1` | Defines remote cluster connections for active-active | + +## Working with the APIs + +### Using kubectl + +Manage all resources using standard `kubectl` commands: + +```bash +# List all Redis Enterprise clusters +kubectl get rec + +# Get detailed information about a specific database +kubectl describe redb my-database + +# Apply a configuration from a YAML file +kubectl apply -f my-redis-config.yaml +``` + +### Resource relationships + +- Create a `RedisEnterpriseCluster` (REC) first to provide the Redis Enterprise infrastructure +- Create `RedisEnterpriseDatabase` (REDB) resources within a cluster to provision individual databases +- Use `RedisEnterpriseActiveActiveDatabase` (REAADB) with `RedisEnterpriseRemoteCluster (RERC)` resources to define participating clusters + +For complete YAML configuration examples, see the [YAML examples]({{< relref "/operate/kubernetes/reference/yaml/" >}}) section. diff --git a/content/operate/kubernetes/reference/kubernetes-api-reference-frontmatter.patch b/content/operate/kubernetes/reference/api/kubernetes-api-reference-frontmatter.patch similarity index 100% rename from content/operate/kubernetes/reference/kubernetes-api-reference-frontmatter.patch rename to content/operate/kubernetes/reference/api/kubernetes-api-reference-frontmatter.patch diff --git a/content/operate/kubernetes/reference/kubernetes-api-reference-template.tmpl b/content/operate/kubernetes/reference/api/kubernetes-api-reference-template.tmpl similarity index 100% rename from content/operate/kubernetes/reference/kubernetes-api-reference-template.tmpl rename to content/operate/kubernetes/reference/api/kubernetes-api-reference-template.tmpl diff --git a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md b/content/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api.md similarity index 99% rename from content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md rename to content/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api.md index 0bd4b92c77..871ed2c52a 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md +++ b/content/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api.md @@ -7,6 +7,8 @@ categories: - kubernetes linkTitle: REAADB API weight: 30 +aliases: +- /operate/kubernetes/reference/api/redis_enterprise_active_active_database_api/ --- apiVersion: diff --git a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md b/content/operate/kubernetes/reference/api/redis_enterprise_cluster_api.md similarity index 99% rename from content/operate/kubernetes/reference/redis_enterprise_cluster_api.md rename to content/operate/kubernetes/reference/api/redis_enterprise_cluster_api.md index 94e257217b..cdb17eecb1 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md +++ b/content/operate/kubernetes/reference/api/redis_enterprise_cluster_api.md @@ -7,6 +7,8 @@ categories: - kubernetes linkTitle: REC API weight: 30 +aliases: +- /operate/kubernetes/reference/api/redis_enterprise_cluster_api/ --- apiVersion: diff --git a/content/operate/kubernetes/reference/redis_enterprise_database_api.md b/content/operate/kubernetes/reference/api/redis_enterprise_database_api.md similarity index 99% rename from content/operate/kubernetes/reference/redis_enterprise_database_api.md rename to content/operate/kubernetes/reference/api/redis_enterprise_database_api.md index f3f5f540f3..2db0ffc687 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_database_api.md +++ b/content/operate/kubernetes/reference/api/redis_enterprise_database_api.md @@ -7,6 +7,8 @@ categories: - kubernetes linkTitle: REDB API weight: 30 +aliases: +- /operate/kubernetes/reference/api/redis_enterprise_database_api/ --- apiVersion: diff --git a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md b/content/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api.md similarity index 98% rename from content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md rename to content/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api.md index 7a12725358..46c681bc55 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md +++ b/content/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api.md @@ -7,6 +7,8 @@ categories: - kubernetes linkTitle: RERC API weight: 30 +aliases: +- /operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api/ --- apiVersion: diff --git a/content/operate/kubernetes/reference/supported_k8s_distributions.md b/content/operate/kubernetes/reference/supported_k8s_distributions.md index 62530d709f..29e489be28 100644 --- a/content/operate/kubernetes/reference/supported_k8s_distributions.md +++ b/content/operate/kubernetes/reference/supported_k8s_distributions.md @@ -7,10 +7,10 @@ categories: - kubernetes description: Support matrix for the current Redis Enterprise K8s operator linkTitle: Supported distributions -weight: 30 +weight: 10 --- -Each release of Redis Enterprise for Kubernetes is thoroughly tested against a set of Kubernetes distributions. The table below lists Redis Enterprise for Kubernetes versions and the Kubernetes distributions they support. +We thoroughly test each release of Redis Enterprise for Kubernetes against a set of Kubernetes distributions. The table below lists Redis Enterprise for Kubernetes versions and the Kubernetes distributions they support. {{}}x86 is currently the only computer architecture supported by Redis Enterprise for Kubernetes. Support for ARM architecture is coming in future releases.{{}} diff --git a/content/operate/kubernetes/reference/yaml/_index.md b/content/operate/kubernetes/reference/yaml/_index.md new file mode 100644 index 0000000000..0b190315d1 --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/_index.md @@ -0,0 +1,88 @@ +--- +Title: YAML examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Example YAML files for deploying Redis Enterprise on Kubernetes with different configurations. +hideListLinks: true +linkTitle: YAML examples +weight: 85 +--- + +This section provides complete YAML examples that cover common Redis Enterprise for Kubernetes deployment scenarios. Each example includes the necessary configuration files and step-by-step instructions for editing and applying them. + +## How to use these examples + +### Download and customize + +1. Copy the YAML content from the examples below +2. Save each YAML block to a separate file with a descriptive name +3. Edit the configuration values to match your environment +4. Apply the files in the correct order using `kubectl apply` + +### Configuration storage + +Redis Enterprise for Kubernetes stores configuration in several places: + +- Custom resources: Cluster and database specifications are stored as Kubernetes custom resources (REC, REDB, REAADB, RERC) +- Secrets: Sensitive data like passwords and certificates are stored in Kubernetes secrets +- ConfigMaps: Non-sensitive configuration data is stored in ConfigMaps +- RBAC resources: Permissions are defined through Roles, ClusterRoles, and their bindings + +### Applying YAML files + +Apply YAML files using `kubectl apply`: + +```bash +# Apply a single file +kubectl apply -f my-config.yaml + +# Apply multiple files +kubectl apply -f rbac/ -f cluster/ -f database/ + +# Validate files without applying +kubectl apply --dry-run=client -f my-config.yaml +``` + +### Monitoring deployment + +Check the status of your resources after applying: + +```bash +# Check operator deployment +kubectl get deployment redis-enterprise-operator + +# Check cluster status +kubectl get rec +kubectl describe rec + +# Check database status +kubectl get redb +kubectl describe redb + +# View events for troubleshooting +kubectl get events --sort-by=.metadata.creationTimestamp +``` + +## Example categories + +- [Basic deployment examples]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment" >}}) - Service account, RBAC, cluster, and database configurations +- [Rack awareness examples]({{< relref "/operate/kubernetes/reference/yaml/rack-awareness" >}}) - Rack-aware cluster configuration and required RBAC +- [Active-Active examples]({{< relref "/operate/kubernetes/reference/yaml/active-active" >}}) - Multi-cluster Active-Active database setup +- [Multi-namespace examples]({{< relref "/operate/kubernetes/reference/yaml/multi-namespace" >}}) - Cross-namespace operator and cluster configurations +- [Log collector RBAC examples]({{< relref "/operate/kubernetes/reference/yaml/log-collector-rbac" >}}) - RBAC permissions for log collection in restricted and all modes + +## Best practices + +- Validate configuration: Use `kubectl apply --dry-run=client` to validate YAML syntax and object schemas before applying +- Version control: Store your customized YAML files in version control +- Resource naming: Use consistent, descriptive names for all resources + +## Related documentation + +- [Reference]({{< relref "/operate/kubernetes/reference" >}}) - Complete API specifications for all custom resources +- [Deploy Redis Enterprise Software for Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start" >}}) - Step-by-step deployment instructions +- [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}) - Detailed multi-namespace setup instructions +- [Active-Active databases]({{< relref "/operate/kubernetes/active-active" >}}) - Active-Active configuration and management diff --git a/content/operate/kubernetes/reference/yaml/active-active.md b/content/operate/kubernetes/reference/yaml/active-active.md new file mode 100644 index 0000000000..a843096367 --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/active-active.md @@ -0,0 +1,63 @@ +--- +Title: Active-Active examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: YAML examples for Active-Active Redis Enterprise databases across multiple Kubernetes clusters. +linkTitle: Active-Active +weight: 30 +--- + +This page provides YAML examples for deploying Active-Active Redis Enterprise databases across multiple Kubernetes clusters. Active-Active databases provide multi-master replication with conflict resolution, enabling global distribution and local read/write access. + +To learn more, see [Active-Active databases]({{< relref "/operate/kubernetes/active-active" >}}). + +## Architecture + +This example shows a two-cluster Active-Active setup: +- Cluster 1: `rec-chicago` in namespace `ns-chicago` +- Cluster 2: `rec-boston` in namespace `ns-boston` + +For complete deployment instructions, see [Active-Active databases]({{< relref "/operate/kubernetes/active-active" >}}). + +## RERC for Chicago cluster + +Create a RedisEnterpriseRemoteCluster (RERC) resource on each participating cluster that points to the other clusters. + +{{}} + +RERC configuration: +- `metadata.name`: Unique name for this remote cluster reference +- `spec.recName`: Name of the remote REC +- `spec.recNamespace`: Namespace of the remote REC +- `spec.apiFqdnUrl`: API endpoint URL for the remote cluster +- `spec.dbFqdnSuffix`: Database hostname suffix for the remote cluster +- `spec.secretName`: Secret containing authentication credentials + +Edit the values in the downloaded YAML file for your specific setup, updating the remote cluster details, API endpoints, and secret names to match your actual environment. + +## Active-Active database + +The RedisEnterpriseActiveActiveDatabase (REAADB) resource defines the Active-Active database. + +{{}} + +REAADB configuration: +- `metadata.name`: Active-Active database name +- `spec.participatingClusters`: List of RERC names that participate in this database +- `spec.globalConfigurations`: Database settings applied to all participating clusters + +Edit the downloaded YAML file to add global database settings such as memory allocation, shard count, replication settings, database secrets, Redis modules, and database-specific Redis configuration. + +## Applying the configuration + +To deploy Active-Active databases using these YAML files, follow [Create Active-Active database (REAADB)]({{< relref "/operate/kubernetes/active-active/create-reaadb" >}}), which provides detailed instructions for preparing clusters, creating RERC resources, and deploying REAADB configurations. + +## Related documentation + +- [Create Active-Active database (REAADB)]({{< relref "/operate/kubernetes/active-active/create-reaadb" >}}) +- [REAADB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_active_active_database_api" >}}) +- [RERC API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_remote_cluster_api" >}}) +- [Networking configuration]({{< relref "/operate/kubernetes/networking" >}}) diff --git a/content/operate/kubernetes/reference/yaml/basic-deployment.md b/content/operate/kubernetes/reference/yaml/basic-deployment.md new file mode 100644 index 0000000000..251edbf46d --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/basic-deployment.md @@ -0,0 +1,92 @@ +--- +Title: Basic deployment examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: YAML examples for basic Redis Enterprise deployment including RBAC, cluster, and database configurations. +linkTitle: Basic deployment +weight: 10 +--- + +This page provides complete YAML examples for a basic Redis Enterprise deployment on Kubernetes. These examples include all the essential components you need to deploy a Redis Enterprise cluster and create a database. + +For complete deployment instructions, see [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start" >}}). + +## Service account + +The service account provides an identity for the Redis Enterprise operator. + +{{}} + +Service account configuration: +- `name`: The service account name used by the operator +- `labels`: Standard labels for Redis Enterprise resources + +## Role + +The Role defines the permissions needed by the Redis Enterprise operator within the namespace. + +{{}} + +Role configuration: +- `name`: Must match the role name referenced in the role binding +- `rules`: Comprehensive permissions for managing Redis Enterprise resources +- `apiGroups`: Includes core Kubernetes APIs and Redis Enterprise custom resources + +Key permissions: +- `app.redislabs.com`: Full access to Redis Enterprise custom resources +- `secrets`: Manage TLS certificates and database credentials +- `services`: Create and manage service endpoints +- `pods`: Monitor and manage Redis Enterprise pods +- `persistentvolumeclaims`: Manage persistent storage + +## Role binding + +The RoleBinding connects the service account to the role, granting the necessary permissions. + +{{}} + +Role binding configuration: +- `subjects.name`: Must match the service account name +- `roleRef.name`: Must match the role name +- `namespace`: Apply in the same namespace as other resources + +## Redis Enterprise cluster + +The RedisEnterpriseCluster (REC) custom resource defines the cluster specification. + +{{}} + +Cluster configuration: +- `metadata.name`: Cluster name (cannot be changed after creation) +- `spec.nodes`: Number of Redis Enterprise nodes (minimum 3) +- `persistentSpec.volumeSize`: Storage size per node +- `redisEnterpriseNodeResources`: CPU and memory allocation per node + +Edit the values in the downloaded YAML file based on your requirements, such as increasing the number of nodes, adjusting storage size, or modifying resource allocation. + +## Redis Enterprise database + +The RedisEnterpriseDatabase (REDB) custom resource defines the database specification. + +{{}} + +Database configuration: +- `metadata.name`: Database name +- `spec.memorySize`: Memory allocation for the database +- `spec.shardCount`: Number of shards (affects performance and scalability) +- `spec.replication`: Enable/disable database replication + +Edit the values in the downloaded YAML file based on your requirements, such as increasing memory for larger datasets, adding more shards for better performance, enabling replication for high availability, or adding Redis modules. + +## Apply the configuration + +To deploy these YAML files, follow [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start" >}}), which provides step-by-step instructions for creating namespaces, deploying the operator, and applying these configuration files. + +## Related documentation + +- [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start" >}}) +- [REC API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) +- [REDB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) diff --git a/content/operate/kubernetes/reference/yaml/log-collector-rbac.md b/content/operate/kubernetes/reference/yaml/log-collector-rbac.md new file mode 100644 index 0000000000..83f8a3f08b --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/log-collector-rbac.md @@ -0,0 +1,154 @@ +--- +Title: Log collector RBAC examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: YAML examples for configuring RBAC permissions for the Redis Enterprise log collector tool in `restricted` and `all` modes. +linkTitle: Log collector RBAC +weight: 50 +--- + +This page provides YAML examples for configuring RBAC permissions for the Redis Enterprise log collector tool. The log collector requires different permission levels depending on the collection mode you choose. + +For complete log collection instructions, see [Collect logs]({{< relref "/operate/kubernetes/logs/collect-logs" >}}). + +## Prerequisites + +- Install the [Redis Enterprise operator]({{< relref "/operate/kubernetes/deployment" >}}) +- Appropriate permissions to create RBAC resources in target namespaces +- Understanding of your deployment model (single namespace, multi-namespace, etc.) + +## Collection modes + +The log collector has two collection modes that require different RBAC permissions: + +- **`restricted` mode** (recommended): Collects only Redis Enterprise resources with minimal security exposure. Default for versions 6.2.18-3+. +- **`all` mode**: Collects comprehensive cluster information including nodes, storage classes, and operator resources. Use when specifically requested by Redis Support. + +## `restricted` mode RBAC + +The `restricted` mode configuration provides minimal permissions for collecting Redis Enterprise resources only. + +{{}} + +`restricted` mode configuration: + +- `Role`: Namespace-scoped permissions for Redis Enterprise resources +- `ClusterRole`: Cluster-wide permissions for CRDs and basic cluster resources +- `rules`: Minimal permissions for Redis Enterprise diagnostics + +Key permissions: + +- `pods, pods/log, pods/exec`: Access to pod information and logs +- `app.redislabs.com/*`: All Redis Enterprise custom resources +- `persistentvolumes`: Storage information for troubleshooting + +## `all` mode RBAC + +The `all` mode configuration provides comprehensive permissions for collecting detailed cluster information. + +{{}} + +`all` mode configuration: + +- `Role`: Extended namespace permissions including operator resources +- `ClusterRole`: Additional cluster-wide permissions for nodes and storage +- `rules`: Comprehensive permissions for full cluster diagnostics + +Additional permissions in `all` mode: + +- `nodes`: Node information and status +- `storageclasses, volumeattachments`: Storage system details +- `operators.coreos.com/*`: OpenShift operator information +- `networking.istio.io/*`: Istio service mesh resources + +## Apply the configuration + +### Namespace requirements + +Create the Role and RoleBinding in every namespace where you need to collect logs: + +- Single namespace: Apply to the namespace where Redis Enterprise runs +- Multi-namespace with single REC: Apply to the REC namespace plus each REDB namespace +- Multi-namespace with multiple RECs: Apply to each REC namespace + +The ClusterRole and ClusterRoleBinding need to be created only once per cluster. + +Edit the values in the downloaded YAML file for your specific setup, updating the namespace references and role binding subjects to match your environment. + +### Role binding configuration + +The RBAC configurations include both roles and role bindings. The role bindings must reference the user or service account that will execute the log collector: + +- User subject: If running the log collector as a specific user, update the `subjects` section in the RoleBinding and ClusterRoleBinding to reference your username +- Service account: If using a service account, create or reference the appropriate service account in the role bindings + +### Manual deployment + +To apply the RBAC configurations manually: + +```bash +# Apply restricted mode RBAC +kubectl apply -f log-collector-restricted-rbac.yaml --namespace + +# Apply all mode RBAC +kubectl apply -f log-collector-all-rbac.yaml --namespace +``` + +## Usage + +After applying the RBAC configuration, run the log collector: + +```bash +# Restricted mode (default for 6.2.18-3+) +python log_collector.py -m restricted -n + +# All mode +python log_collector.py -m all -n +``` + +## Security considerations + +### Best practices + +- Use `restricted` mode unless you specifically need additional cluster information +- Limit namespace access to only where log collection is needed +- Handle collected data according to your organization's security policies + +### Secrets permission explanation + +The RBAC configurations request read access to secrets in the collected namespaces. **Secrets are not collected or included in the log package sent to Redis Support.** This permission is required because: + +- The log collector uses Helm commands (`helm list`, `helm get all`) to gather Redis Enterprise Helm chart deployment information +- Helm stores its deployment metadata in Kubernetes secrets +- This metadata contains only deployment configuration (not sensitive data) + +If your security policies prohibit secrets access, you can remove the secrets permission from the Role, but this will limit the log collector's ability to gather Helm deployment information. + +## Troubleshooting + +### Permission errors + +- Verify that roles and bindings are applied correctly in the target namespaces +- Check that the ClusterRole is applied cluster-wide +- Ensure the service account has proper role bindings + +### Missing resources + +- Consider switching to `all` mode if additional cluster resources are needed +- Verify that custom resource definitions are installed +- Check that the operator has proper permissions + +## Next steps + +- [Collect logs guide]({{< relref "/operate/kubernetes/logs/collect-logs" >}}) +- [Basic deployment examples]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment" >}}) +- [Multi-namespace deployment]({{< relref "/operate/kubernetes/reference/yaml/multi-namespace" >}}) + +## Related documentation + +- [Kubernetes RBAC documentation](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) +- [Redis Enterprise troubleshooting]({{< relref "/operate/kubernetes/logs" >}}) +- [Operator deployment guide]({{< relref "/operate/kubernetes/deployment" >}}) diff --git a/content/operate/kubernetes/reference/yaml/multi-namespace.md b/content/operate/kubernetes/reference/yaml/multi-namespace.md new file mode 100644 index 0000000000..63ab090fb5 --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/multi-namespace.md @@ -0,0 +1,67 @@ +--- +Title: Multi-namespace examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: YAML examples for deploying Redis Enterprise across multiple Kubernetes namespaces. +linkTitle: Multi-namespace +weight: 40 +--- + +Multi-namespace deployment lets a single Redis Enterprise operator manage clusters and databases in different namespaces, providing better resource isolation and organization. + +Multi-namespace deployment enables: +- Namespace isolation: Separate Redis Enterprise resources by team, environment, or application +- Centralized management: Single operator manages multiple namespaces +- Resource sharing: Efficient use of cluster resources across namespaces +- Flexible RBAC: Fine-grained permissions per namespace + +This example shows: +- Operator namespace: `redis-enterprise-operator` (where the operator and REC run) +- Consumer namespaces: `app-production`, `app-staging` (where REDB resources are created) + +For complete deployment instructions, see [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}). + +## Operator service account + +Deploy these resources in the namespace where the Redis Enterprise operator runs. + +{{}} + +## Operator cluster role + +Grant the operator cluster-wide permissions to manage resources across namespaces. + +{{}} + +## Operator cluster role binding + +{{}} + +## Consumer role + +{{}} + +## Consumer role binding + +{{}} + +Consumer namespace configuration: + +- `subjects.name`: Must match the operator service account name +- `subjects.namespace`: Must be the operator namespace, not the consumer namespace +- `roleRef.name`: Must match the consumer role name + +## Next steps + +- [Configure networking across namespaces]({{< relref "/operate/kubernetes/networking" >}}) +- [Set up monitoring for multi-namespace deployment]({{< relref "/operate/kubernetes/re-clusters/connect-prometheus-operator" >}}) +- [Learn about resource management]({{< relref "/operate/kubernetes/recommendations" >}}) + +## Related documentation + +- [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}) +- [RBAC configuration]({{< relref "/operate/kubernetes/security" >}}) +- [Kubernetes namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) diff --git a/content/operate/kubernetes/reference/yaml/rack-awareness.md b/content/operate/kubernetes/reference/yaml/rack-awareness.md new file mode 100644 index 0000000000..f09825b1a3 --- /dev/null +++ b/content/operate/kubernetes/reference/yaml/rack-awareness.md @@ -0,0 +1,126 @@ +--- +Title: Rack awareness examples +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: YAML examples for rack-aware Redis Enterprise deployments that distribute nodes across availability zones. +linkTitle: Rack awareness +weight: 20 +--- + +This page provides YAML examples for deploying Redis Enterprise with [rack awareness]({{< relref "/operate/kubernetes/architecture/operator-architecture#rack-awareness" >}}). Rack awareness distributes Redis Enterprise nodes and database shards across different availability zones or failure domains to improve high availability and fault tolerance. + +## Prerequisites + +- Label [Kubernetes nodes](https://kubernetes.io/docs/concepts/architecture/nodes/) with zone information +- Typically uses the standard label `topology.kubernetes.io/zone` +- Verify node labels: `kubectl get nodes --show-labels` +- Install the [Redis Enterprise operator]({{< relref "/operate/kubernetes/deployment" >}}) + +For complete deployment instructions, see [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment" >}}). + +## Service account + +The service account for rack-aware deployments is the same as [basic deployments]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment#service-account" >}}). + +{{}} + +## Cluster role + +Rack awareness requires additional permissions to read [node labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) across the cluster. + +{{}} + +Cluster role configuration: +- `name`: ClusterRole name for rack awareness permissions +- `rules`: Permissions to read nodes and their labels cluster-wide +- `resources`: Access to `nodes` resource for zone label discovery + +Key permissions: +- `nodes`: Read access to discover node zone labels +- `get, list, watch`: Monitor node changes and zone assignments + +## Cluster role binding + +The [ClusterRoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding) grants cluster-wide permissions to the service account. + +{{}} + +Cluster role binding configuration: +- `subjects.name`: Must match the service account name +- `subjects.namespace`: Namespace where the operator is deployed +- `roleRef.name`: Must match the cluster role name + +## Rack-aware Redis Enterprise cluster + +The rack-aware [REC configuration]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) includes the `rackAwarenessNodeLabel` field. + +{{}} + +Rack-aware cluster configuration: +- `metadata.name`: Cluster name (cannot be changed after creation) +- `spec.rackAwarenessNodeLabel`: Node label used for zone identification +- `spec.nodes`: Minimum 3 nodes, ideally distributed across zones + +Edit the values in the downloaded YAML file based on your environment, such as increasing nodes for better zone distribution, using custom zone labels, adding resource specifications, or enabling persistent storage. + +### Common zone labels + +Different Kubernetes distributions use different zone labels: +- `Standard`: `topology.kubernetes.io/zone` +- `Legacy`: `failure-domain.beta.kubernetes.io/zone` +- `Custom`: Your organization's specific labeling scheme + +Verify the correct label on your nodes: + +```bash +kubectl get nodes -o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels.'topology\.kubernetes\.io/zone' +``` + +## Redis Enterprise database + +Database configuration for rack-aware clusters is the same as [basic deployments]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment#redis-enterprise-database" >}}). + +**Important**: For rack awareness to be effective, ensure your database has replication enabled. Rack awareness distributes primary and replica shards across zones, so databases without replication will not benefit from zone distribution. + +{{}} + +## Apply the configuration + +To deploy rack-aware Redis Enterprise clusters, follow [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment" >}}) and ensure your Kubernetes nodes have proper zone labels. For detailed rack awareness configuration, see the [node selection recommendations]({{< relref "/operate/kubernetes/recommendations/node-selection" >}}). + +## Troubleshooting + +### Nodes not distributed across zones + +- Verify node labels are correct +- Check that sufficient nodes exist in each zone +- Ensure the `rackAwarenessNodeLabel` matches actual node labels + +### Cluster role permissions denied + +- Verify the ClusterRole and ClusterRoleBinding are applied +- Check that the service account name matches in all resources + +### Database shards not distributed + +- Confirm the cluster has rack awareness enabled +- **Check that the database has replication enabled** - rack awareness distributes primary/replica pairs across zones +- Verify the database has multiple shards +- Ensure sufficient nodes exist across zones + +## Next steps + +- [Configure Active-Active databases]({{< relref "/operate/kubernetes/reference/yaml/active-active" >}}) +- [Set up multi-namespace deployment]({{< relref "/operate/kubernetes/reference/yaml/multi-namespace" >}}) +- [Learn about database replication]({{< relref "/operate/kubernetes/re-databases/replica-redb" >}}) + +## Related documentation + +- [Node selection recommendations]({{< relref "/operate/kubernetes/recommendations/node-selection" >}}) +- [REC API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) +- [REDB API reference]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}) +- [Kubernetes node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/) +- [Redis Enterprise cluster architecture]({{< relref "/operate/kubernetes/architecture" >}}) diff --git a/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md index 7d9dc3b19d..a7203ba3f2 100644 --- a/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md @@ -40,7 +40,7 @@ This release includes the following container images: * Added support for VMware [Tanzu Kubernetes Grid (TKG)](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html), in addition to [Tanzu Kubernetes Grid Integration Edition (TKGI)](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid-Integrated-Edition/index.html) that was previously and is still supported (RED-65630). -* Added support for PEM encryption through the [Redis Enterprise cluster API]({{}})(RED-78613). +* Added support for PEM encryption through the [Redis Enterprise cluster API]({{}})(RED-78613). * Hardened security context constraints to align with standards for OpenShift 4.11 (RED-83215). @@ -56,14 +56,14 @@ This release includes the following container images: ## API changes -The following fields were added to the [Redis Enterprise cluster (REC) API]({{}}): +The following fields were added to the [Redis Enterprise cluster (REC) API]({{}}): * Added `.services.apiService.type` to allow configuration of the API service type. * Made `.redisOnFlashSpec` available by default. * Made `.ocspConfiguration` available by default for configuring OCSP stapling. * Made `.encryptPkeys` available by default for configuring PEM encryption. -The following fields were added to the [Redis Enterprise database (REDB) API]({{}}): +The following fields were added to the [Redis Enterprise database (REDB) API]({{}}): * `.isRoF` and `.rofRamSize` added to support the [Auto Tiering feature]({{< relref "/operate/kubernetes/re-clusters/auto-tiering.md" >}}). diff --git a/content/operate/kubernetes/release-notes/6-4-2-releases/6-4-2-6.md b/content/operate/kubernetes/release-notes/6-4-2-releases/6-4-2-6.md index c8eb1b07a8..c5bbea3db3 100644 --- a/content/operate/kubernetes/release-notes/6-4-2-releases/6-4-2-6.md +++ b/content/operate/kubernetes/release-notes/6-4-2-releases/6-4-2-6.md @@ -71,7 +71,7 @@ The key features, bug fixes, and known limitations are described below. ## API changes -The following fields were changed in the [RedisEnterpriseCluster (REC) API]({{}}): +The following fields were changed in the [RedisEnterpriseCluster (REC) API]({{}}): * `containerTimezoneSpec.timezoneName` added to configure timezones on the Redis Enterprise pods * `hostAliases` added for adding an entry to the Redis Enterprise pods' `/etc/hosts` * `redisEnteprisePodAnnotations` added to specify annotations that should only be set on the Redis Enterprise pods @@ -80,8 +80,8 @@ The following fields were changed in the [RedisEnterpriseCluster (REC) API]({{}}) - * [`RedisEnterpriseActiveActiveDatabase` (REAADB) API]({{}}) + * [`RedisEnterpriseRemoteCluster` (RERC) API]({{}}) + * [`RedisEnterpriseActiveActiveDatabase` (REAADB) API]({{}}) ## Compatibility notes diff --git a/content/operate/kubernetes/release-notes/6-4-2-releases/k8s-6-4-2-4.md b/content/operate/kubernetes/release-notes/6-4-2-releases/k8s-6-4-2-4.md index acc4e6dedf..4cf02314ba 100644 --- a/content/operate/kubernetes/release-notes/6-4-2-releases/k8s-6-4-2-4.md +++ b/content/operate/kubernetes/release-notes/6-4-2-releases/k8s-6-4-2-4.md @@ -55,7 +55,7 @@ The key features, bug fixes, and known limitations are described below. ## API changes -The following fields were changed in the [Redis Enterprise cluster (REC) API]({{}}): +The following fields were changed in the [Redis Enterprise cluster (REC) API]({{}}): * Added `.spec.ldap` for configuring cluster-level LDAP settings * Added `.spec.certificates.ldapClientCertificateSecretName` for configuring LDAP client certificate @@ -141,8 +141,8 @@ On clusters with more than 9 REC nodes, a Kubernetes upgrade can render the Redi When a database is configured as [rack-aware]({{< relref "/operate/rs/clusters/configure/rack-zone-awareness" >}}) and replication is turned off, the resharding operation fails. Workaround: - Before resharding your database, [turn off rack awareness]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). Set the `spec.rackAware` field in your REDB custom resource to `false`. - After the resharding process is complete, you can [re-enable rack awareness]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). + Before resharding your database, [turn off rack awareness]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}). Set the `spec.rackAware` field in your REDB custom resource to `false`. + After the resharding process is complete, you can [re-enable rack awareness]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api" >}}). * Long cluster names cause routes to be rejected (RED-25871) diff --git a/content/operate/kubernetes/release-notes/7-22-0-releases/7-22-0-7-april2025.md b/content/operate/kubernetes/release-notes/7-22-0-releases/7-22-0-7-april2025.md index 564b1f852d..25775e343d 100644 --- a/content/operate/kubernetes/release-notes/7-22-0-releases/7-22-0-7-april2025.md +++ b/content/operate/kubernetes/release-notes/7-22-0-releases/7-22-0-7-april2025.md @@ -27,8 +27,8 @@ Redis Enterprise for Kubernetes 7.22.0-7 is a feature release that includes enha | **CRD** | **Field** | **Change** | **Description** | |--------|-----------|------------|-----------------| | REAADB | `spec.participatingClusters[].namespace` | Added | Specifies the namespace in which the REAADB object will be deployed in the corresponding participating cluster. Make sure that the Redis Enterprise operator is configured to watch this namespace and that the required RBAC configuration is in place. For more information, see [Multi-namespace deployments]({{}}). If no namespace is specified, the REAADB object is deployed to the REC’s namespace in the corresponding cluster. | -| REC | `spec.usageMeter.callHomeClient` | Added | Configuration for the call home client. For details, see the [REC API reference]({{}}). | -| REC | `spec.securityContext.resourceLimits` | Added | Configuration that allows Redis Enterprise to adjust system resource settings. For details, see the [REC API reference]({{}}). | +| REC | `spec.usageMeter.callHomeClient` | Added | Configuration for the call home client. For details, see the [REC API reference]({{}}). | +| REC | `spec.securityContext.resourceLimits` | Added | Configuration that allows Redis Enterprise to adjust system resource settings. For details, see the [REC API reference]({{}}). | ## Breaking changes diff --git a/content/operate/kubernetes/security/manage-rec-credentials.md b/content/operate/kubernetes/security/manage-rec-credentials.md index 5a553336ae..71a8e692bd 100644 --- a/content/operate/kubernetes/security/manage-rec-credentials.md +++ b/content/operate/kubernetes/security/manage-rec-credentials.md @@ -8,7 +8,7 @@ categories: linkTitle: Manage REC credentials weight: 93 --- -Redis Enterprise for Kubernetes uses a custom resource called [`RedisEnterpriseCluster`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) to create a Redis Enterprise cluster (REC). During creation it generates random credentials for the operator to use. The credentials are saved in a Kubernetes (K8s) [secret](https://kubernetes.io/docs/concepts/configuration/secret/). The secret name defaults to the name of the cluster. +Redis Enterprise for Kubernetes uses a custom resource called [`RedisEnterpriseCluster`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) to create a Redis Enterprise cluster (REC). During creation it generates random credentials for the operator to use. The credentials are saved in a Kubernetes (K8s) [secret](https://kubernetes.io/docs/concepts/configuration/secret/). The secret name defaults to the name of the cluster. {{}} This procedure is only supported for operator versions 6.0.20-12 and above. diff --git a/content/operate/kubernetes/upgrade/openshift-cli.md b/content/operate/kubernetes/upgrade/openshift-cli.md index 6e351dd9e0..34c0a19774 100644 --- a/content/operate/kubernetes/upgrade/openshift-cli.md +++ b/content/operate/kubernetes/upgrade/openshift-cli.md @@ -33,7 +33,7 @@ Your Redis Enterprise clusters must be running version 7.4.2-2 or later before u #### Redis database version -Your Redis databases must be running version 7.2 or later before upgrading your cluster version. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). +Your Redis databases must be running version 7.2 or later before upgrading your cluster version. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). #### RHEL9-compatible modules @@ -220,7 +220,7 @@ After the cluster is upgraded, you can upgrade your databases. To upgrade your R To upgrade your REAADB, see [Upgrade an Active-Active database]({{}}) for details on the `rladmin` and `crdb-cli` commands required. Reach out to Redis support if you have additional questions. -Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. ## Troubleshooting diff --git a/content/operate/kubernetes/upgrade/upgrade-olm.md b/content/operate/kubernetes/upgrade/upgrade-olm.md index b8aac4990e..2ed7436723 100644 --- a/content/operate/kubernetes/upgrade/upgrade-olm.md +++ b/content/operate/kubernetes/upgrade/upgrade-olm.md @@ -33,7 +33,7 @@ Your Redis Enterprise clusters must be running version 7.4.2-2 or later before u #### Redis database version -Your Redis databases must be running version 7.2 or later before upgrading your cluster version to 7.8.2-6. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). +Your Redis databases must be running version 7.2 or later before upgrading your cluster version to 7.8.2-6. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). #### RHEL9-compatible modules @@ -143,7 +143,7 @@ After the cluster is upgraded, you can upgrade your databases. To upgrade your R To upgrade your REAADB, see [Upgrade an Active-Active database]({{}}) for details on the `rladmin` and `crdb-cli` commands required. Reach out to Redis support if you have additional questions. -Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. The Redis Enterprise cluster (REC) can be updated automatically or manually. To trigger automatic upgrade of the REC after the operator upgrade completes, specify `autoUpgradeRedisEnterprise: true` in your REC spec. If you don't have automatic upgrade enabled, follow the below steps for the manual upgrade. diff --git a/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md b/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md index 03b17202f8..9b46e8f757 100644 --- a/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md +++ b/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md @@ -33,7 +33,7 @@ Check the [Redis Enterprise for Kubernetes release notes]({{}}). +Check the release notes for your target version to determine the minimum Redis database version required. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). ### Module compatibility @@ -220,7 +220,7 @@ After the cluster is upgraded, you can upgrade your databases. To upgrade your R To upgrade your REAADB, see [Upgrade an Active-Active database]({{}}) for details on the `rladmin` and `crdb-cli` commands required. Reach out to Redis support if you have additional questions. -Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. ## Troubleshooting diff --git a/content/operate/oss_and_stack/install/install-stack/apt.md b/content/operate/oss_and_stack/install/install-stack/apt.md index 044a46545f..1f77e1ba0d 100644 --- a/content/operate/oss_and_stack/install/install-stack/apt.md +++ b/content/operate/oss_and_stack/install/install-stack/apt.md @@ -12,7 +12,6 @@ weight: 2 ## Install Redis Open Source on Ubuntu or Debian Linux using APT -See [this page](https://redis.io/downloads/#redis-stack-downloads) for a complete list of supported Ubuntu and Debian platforms. Add the repository to the APT index, update it, and install Redis Open Source: {{< highlight bash >}} diff --git a/content/operate/oss_and_stack/install/install-stack/rpm.md b/content/operate/oss_and_stack/install/install-stack/rpm.md index 8a2fa234ea..89f194f212 100644 --- a/content/operate/oss_and_stack/install/install-stack/rpm.md +++ b/content/operate/oss_and_stack/install/install-stack/rpm.md @@ -12,7 +12,6 @@ weight: 3 ## Install Redis Open Source on Red Hat, CentOS, or Rocky Linux using RPM -See [this page](https://redis.io/downloads/#redis-downloads) for a complete list of supported Red Hat/Rocky platforms. Follow these steps to install Redis Open Source. 1. Create the file `/etc/yum.repos.d/redis.repo` with the following contents. diff --git a/content/operate/rc/databases/back-up-data.md b/content/operate/rc/databases/back-up-data.md index 7c771d8f4e..8a75f49bf8 100644 --- a/content/operate/rc/databases/back-up-data.md +++ b/content/operate/rc/databases/back-up-data.md @@ -70,9 +70,15 @@ Database backups can be stored to a cloud provider service or saved to a URI usi Your subscription needs the ability to view permissions and update objects in the storage location. Specific details vary according to the provider. To learn more, consult the provider's documentation. -The following sections describe specific backup options. Be aware that provider features change frequently. For best results, use your provider's documentation for the latest info. +Be aware that provider features change frequently. For best results, use your provider's documentation for the latest info. -### AWS S3 +Select the tab for your storage location type. + +{{< multitabs id="backup-storage-locations" + tab1="AWS S3" + tab2="Google Cloud Storage" + tab3="Azure Blob Storage" + tab4="FTP/FTPS Server" >}} To store backups in an Amazon Web Services (AWS) Simple Storage Service (S3) [bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html): @@ -156,7 +162,7 @@ To learn more, see [Using bucket policies](https://docs.aws.amazon.com/AmazonS3/ An AWS S3 bucket can be used by only one Redis Cloud account. If you have more than one Redis Cloud account, repeat the setup steps for multiple buckets. {{< /note >}} -### Google Cloud Storage +-tab-sep- To store backups in a Google Cloud Storage [bucket](https://cloud.google.com/storage/docs/creating-buckets): @@ -170,29 +176,19 @@ To store backups in a Google Cloud Storage [bucket](https://cloud.google.com/sto 1. Select the **Grant Access** button and then add: - `service@redislabs-prod-clusters.iam.gserviceaccount.com` + ```sh + service@redislabs-prod-clusters.iam.gserviceaccount.com + ``` 1. Set **Role** to **Storage Legacy Bucket Writer**. 1. Save your changes. -1. Verify that your bucket does _not_ have a set retention policy. - - To do so: - - 1. View the details of your bucket. - - 1. Select the **Configuration** tab. - - 1. Verify **Protection** -> **Bucket retention policy** is set to **none**. - - If a policy is defined and you cannot delete it, you need to use a different bucket. - Use the bucket details **Configuration** tab to locate the **gsutil URI**. This is the value you'll assign to your resource's backup path. To learn more, see [Use IAM permissions](https://cloud.google.com/storage/docs/access-control/using-iam-permissions#bucket-iam). -### Azure Blob Storage +-tab-sep- To store your backup in Microsoft Azure Blob Storage, sign in to the Azure portal and then: @@ -206,7 +202,9 @@ Set your resource's **Backup Path** to the path of your storage account. The syntax for creating the backup varies according to your authorization mechanism. For example: -`abs://:storage_account_access_key@storage_account_name/container_name/[path/]` +``` +abs://storage_account_access_key@storage_account_name/container_name/[path/] +``` Where: @@ -218,11 +216,14 @@ Where: To learn more, see [Authorizing access to data in Azure Storage](https://docs.microsoft.com/en-us/azure/storage/common/storage-auth). -### FTP Server +-tab-sep- To store your backups on an FTP server, set its **Backup Path** using the following syntax: -`://[username]:[password]@[hostname]:[port]/[path]/` +```sh +://[username]:[password]@[hostname]:[port]/[path]/ +``` + Where: @@ -238,3 +239,5 @@ If your FTP username or password contains special characters such as `@`, `\`, o {{< /note >}} The user account needs permission to write files to the server. + +{{< /multitabs >}} diff --git a/content/operate/rc/databases/import-data.md b/content/operate/rc/databases/import-data.md index 4841e2feb8..f9908f9999 100644 --- a/content/operate/rc/databases/import-data.md +++ b/content/operate/rc/databases/import-data.md @@ -44,16 +44,23 @@ To import a dataset from any publicly available Redis Open Source server: If you have an RDB or a compressed RDB file from a previous backup, you can restore data from that file into your Redis Cloud database. -### Via FTP or HTTP +Select the tab for your storage location type. -To import an RDB file stored on an FTP or HTTP server: +{{< multitabs id="rdb-import-locations" + tab1="FTP or HTTP server" + tab2="AWS S3" + tab3="Google Cloud Storage" + tab4="Azure Blob Storage" >}} 1. Select **Databases** from the Redis Cloud console menu and then select your database from the list. -1. Select **Import**. - {{The Import dataset section and Import button.}} -1. Enter the details for the RDB file: +2. Select **Import**. +3. Enter the details for the RDB file: - Source type - Select **FTP** or **HTTP**. - - Source path - Enter the URL for the RDB file: `://[username][:password]@hostname[:port]/[path/]filename.rdb[.gz]` + - Source path - Enter the URL for the RDB file: + + ``` + ://[username][:password]@hostname[:port]/[path/]filename.rdb[.gz] + ``` Where: @@ -69,14 +76,14 @@ To import an RDB file stored on an FTP or HTTP server: If your FTP username or password contains special characters such as `@`, `\`, or `:`, you must URL encode (also known as Percent encode) these special characters. If you don't, your database may become stuck. {{< /note >}} -1. For sharded databases with multiple RDB files, select **Add source** to add another RDB file. +4. For sharded databases with multiple RDB files, select **Add source** to add another RDB file. {{< warning >}} For sharded databases with multiple RDB files, make sure to add every file before proceeding. {{< /warning >}} -1. Select **Import**. +5. Select **Import**. -### Via AWS S3 +-tab-sep- To use the Redis Cloud console to import your data, you must first share the file from the Amazon Web Services (AWS) management console. @@ -158,22 +165,25 @@ To share and import an RDB file that is stored in an AWS Simple Storage Service 1. In the [Redis Cloud console](https://cloud.redis.io/), select the target database from the database list. 1. Select **Import**. - {{The Import dataset section and Import button.}} 1. Enter the details for the RDB file: - Source type - Select **AWS S3**. - - Source path - Enter the URL for the RDB file: `s3://bucketname/[path/]filename.rdb[.gz]` + - Source path - Enter the URL for the RDB file: + + ```text + s3://bucketname/[path/]filename.rdb[.gz] + ``` - Where: + Where: - - `bucketname` - Name of the S3 bucket - - `path` - Path to the file, if necessary - - `filename` - Filename of the RDB file, including the .gz suffix if the file is compressed + - `bucketname` - Name of the S3 bucket + - `path` - Path to the file, if necessary + - `filename` - Filename of the RDB file, including the .gz suffix if the file is compressed 1. For sharded databases with multiple RDB files, select **Add source** to add another RDB file. 1. Select **Import**. -### Via Google Cloud Storage +-tab-sep- To use the Redis Cloud console to import your data, you must first share the file from the Google Cloud console. @@ -192,7 +202,6 @@ To share and import an RDB file that is stored in a Google Cloud Storage bucket: 1. In the [Redis Cloud console](https://cloud.redis.io/), select the target database from the database list. 1. Select **Import**. - {{The Import dataset section and Import button.}} 1. Enter the details for the RDB file: - Source type - Select **Google Cloud Storage**. - Source path - Enter the URL for the RDB file: `gs://bucketname/[path/]filename.rdb[.gz]` @@ -206,17 +215,16 @@ To share and import an RDB file that is stored in a Google Cloud Storage bucket: 1. Select **Import**. -### Via Azure Blob Storage container +-tab-sep- To import an RDB file stored in a Microsoft Azure Blog storage container: 1. In the Redis Cloud console, select the target database from the database list. 1. Select **Import**. - {{The Import dataset section and Import button.}} 1. Enter the details for the RDB file: - Source type - Select **Azure Blob Storage**. - Source path - Enter the URL for the RDB file: - ```text + ``` abs://:storage_account_access_key@storage_account_name/[container/]filename.rdb[.gz] ``` @@ -230,3 +238,5 @@ To import an RDB file stored in a Microsoft Azure Blog storage container: 1. For sharded databases with multiple RDB files, select **Add source** to add another RDB file. 1. Select **Import**. + +{{< /multitabs >}} diff --git a/content/operate/rs/7.4/clusters/_index.md b/content/operate/rs/7.4/clusters/_index.md index 1b186a6d42..cbd79a5ff6 100644 --- a/content/operate/rs/7.4/clusters/_index.md +++ b/content/operate/rs/7.4/clusters/_index.md @@ -10,6 +10,7 @@ description: Administrative tasks and information related to the Redis Enterpris hideListLinks: false linktitle: Clusters weight: 36 +aliases: [/operate/rs/7.4/clusters/monitoring/] url: '/operate/rs/7.4/clusters/' --- diff --git a/content/operate/rs/clusters/optimize/disk-sizing-heavy-write-scenarios.md b/content/operate/rs/clusters/optimize/disk-sizing-heavy-write-scenarios.md index 14bd9a0ab9..77f1c8f531 100644 --- a/content/operate/rs/clusters/optimize/disk-sizing-heavy-write-scenarios.md +++ b/content/operate/rs/clusters/optimize/disk-sizing-heavy-write-scenarios.md @@ -10,31 +10,127 @@ description: Sizing considerations for persistent disk space for heavy throughpu linktitle: Disk sizing weight: $weight --- -In extreme write scenarios, when AOF is enabled, the AOF rewrite process -may require considerably more disk space for database persistence. - -To estimate the required persistent disk space in such cases, use the -formula described below. - -**The required persistent disk space for AOF rewrite purposes in extreme -write scenarios, assuming identical shard sizes:** - -**X (1 + 3Y +Y²)** -where: -**X** = each shard size -**Y** = number of shards - -Following are examples of database configurations and the persistence -disk space they would require in this scenario: - -| | Example 1 | Example 2 | Example 3 | Example 4 | -|---|------------|-----------------|------------|-----------------| -| Database size (GB) | 10 | 10 | 40 | 40 | -| Number of shards | 4 | 16 | 5 | 15 | -| Shard size (GB) | 2.5 | 0.625 | 8 | 2.67 | -| Required disk space (GB) | 73 | 191 | 328 | 723 | - -For disk size requirements in standard usage scenarios, refer to the -[Hardware -requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}) -section. +In extreme write scenarios when append-only files (AOF) are enabled, the AOF rewrite process can require considerably more disk space for [database persistence]({{}}). + +For disk size requirements for standard usage, see [Hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements" >}}). + +## Estimate required disk space + +To estimate the required persistent disk space for AOF rewrite purposes in extreme write scenarios, use the following formula: + +**X (1 + 3Y + Y²)** + +Where: +- **X** = size of each shard in GB +- **Y** = number of shards + + +## Examples + +The following examples show how to calculate the persistent disk space required for heavy write scenarios for different database configurations, where: + +- **Database size** is the memory limit configured for the database. + +- **Number of shards** is the total number of shards (primary shards + replica shards). + +### Example 1 + +- Database size = 10 GB +- Number of shards = 4 + +1. Calculate the shard size: + + ```sh + Shard size = database size / number of shards + = 10 GB / 4 shards + = 2.5 GB per shard + ``` + +1. Use the formula to calculate the required persistent disk space: + + ```sh + Disk space = X (1 + 3Y + Y²) + = 2.5 (1 + 3 × 4 + 4²) + = 2.5 (1 + 12 + 16) + = 2.5 × 29 + = 72.5 GB + ``` + +1. Round up to 73 GB of required disk space. + +### Example 2 + +- Database size = 10 GB +- Number of shards = 16 + +1. Calculate the shard size: + + ```sh + Shard size = database size / number of shards + = 10 GB / 16 shards + = 0.625 GB per shard + ``` + +1. Use the formula to calculate the required persistent disk space: + + ```sh + Disk space = X (1 + 3Y + Y²) + = 0.625 (1 + 3 × 16 + 16²) + = 0.625 (1 + 48 + 256) + = 0.625 × 305 + = 190.625 GB + ``` + +1. Round up to 191 GB of required disk space. + +### Example 3 + +- Database size = 40 GB +- Number of shards = 5 + +1. Calculate the shard size: + + ```sh + Shard size = database size / number of shards + = 40 GB / 5 shards + = 8 GB per shard + ``` + +1. Use the formula to calculate the required persistent disk space: + + ```sh + Disk space = X (1 + 3Y + Y²) + = 8 (1 + 3 × 5 + 5²) + = 8 (1 + 15 + 25) + = 8 × 41 + = 328 GB + ``` + +1. Required disk space: 328 GB. + +### Example 4 + +- Database size = 40 GB +- Number of shards = 15 + +1. Calculate the shard size: + + ```sh + Shard size = database size / number of shards + = 40 GB / 15 shards + = 2.67 GB per shard + ``` + +1. Use the formula to calculate the required persistent disk space: + + ```sh + Disk space = X (1 + 3Y + Y²) + = 2.67 (1 + 3 × 15 + 15²) + = 2.67 (1 + 45 + 225) + = 2.67 × 271 + = 723.57 GB + ``` + +1. Round up to 724 GB of required disk space. + + diff --git a/content/operate/rs/monitoring/_index.md b/content/operate/rs/monitoring/_index.md index 42952af901..8308cc327b 100644 --- a/content/operate/rs/monitoring/_index.md +++ b/content/operate/rs/monitoring/_index.md @@ -10,7 +10,7 @@ description: Use the metrics that measure the performance of your Redis Enterpri hideListLinks: true linkTitle: Monitoring weight: 70 -aliases: /operate/rs/clusters/monitoring/ +aliases: [/operate/rs/clusters/monitoring/, /operate/rs/7.4/clusters/monitoring/] --- You can use the metrics that measure the performance of your Redis Enterprise Software clusters, nodes, databases, and shards diff --git a/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-0-241.md b/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-0-241.md new file mode 100644 index 0000000000..138e49133e --- /dev/null +++ b/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-0-241.md @@ -0,0 +1,272 @@ +--- +Title: Redis Enterprise Software release notes 7.22.0-241 (July 2025) +alwaysopen: false +categories: +- docs +- operate +- rs +compatibleOSSVersion: Redis 7.4.0 +description: Bug fixes for LDAP authentication, Active-Active databases, database recovery, support package generation, memory leaks, and the Cluster Manager UI. +linkTitle: 7.22.0-241 (July 2025) +weight: 88 +--- + +​[​Redis Enterprise Software version 7.22.0](https://redis.io/downloads/#software) is now available! + +## Highlights + +This version offers: + +- Bug fixes for LDAP authentication, Active-Active databases, database recovery, support package generation, memory leaks, and the Cluster Manager UI. + +## New in this release + +### Redis database versions + +Redis Enterprise Software version 7.22.0 includes three Redis database versions: 7.4, 7.2, and 6.2. + +The [default Redis database version]({{}}) is 7.4. + +### Redis module feature sets + +Redis Enterprise Software comes packaged with several modules. As of version 7.22.0, Redis Enterprise Software includes three feature sets, compatible with different Redis database versions. + +The following table shows which Redis modules are compatible with each Redis database version included in this release. + +| Redis database version | Compatible Redis modules | +|------------------------|--------------------------| +| 7.4 | [RediSearch 2.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.10-release-notes.md" >}})
[RedisJSON 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.8-release-notes.md" >}})
[RedisTimeSeries 1.12]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.12-release-notes.md" >}})
[RedisBloom 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.8-release-notes.md" >}}) | +| 7.2 | [RediSearch 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md" >}})
[RedisJSON 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md" >}})
[RedisTimeSeries 1.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes.md" >}})
[RedisBloom 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes.md" >}}) | +| 6.2 | [RediSearch 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes.md" >}})
[RedisJSON 2.4]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes.md" >}})
[RedisTimeSeries 1.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md" >}})
[RedisBloom 2.4]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md" >}}) | + +### Resolved issues + +- RS140077: Fixed a syncer issue where the number of keys did not match across the instances of Active-Active databases reconfigured with `only_configuration` after cluster recovery. + +- RS155910: Fixed an issue where event logs incorrectly attributed configuration changes to `system` instead of the user who made the changes if they authenticated using LDAP. + +- RS149040: Fixed a Gunicorn memory leak when using Active-Active databases in Kubernetes (REAADB). + +- RS160282: Fixed an issue where database recovery failed if any cluster nodes were still unavailable after cluster recovery. + +- RS156160: Fixed an issue where the DMC proxy restarted unnecessarily after LDAP configuration updates. + +- RS110383: Fixed LDAP socket file permissions to allow users in the `redislabs` group to run commands. + +- RS163846: Fixed an issue where Active-Active database resharding could assign duplicate shard IDs. + +- RS161588: Fixed an issue where support package generation could fail if Redis Enterprise Software was installed with the `--skip-updating-env-path` option. + +- RS115284: Fixed pdns file permissions. + +- RS120628: Fixed an issue where database routing was not updated after shard role changes, causing write requests to be sent to replica shards instead of primary shards. + +- RS161522: Fixed an issue where hash keys with counters were not properly garbage collected, causing these keys to grow in size when frequently deleted and recreated. + +- RS161524: Fixed an issue where the Cluster Manager UI could not modify Active-Active database configurations when instance URLs were created without explicit port numbers. + +- RS163674: Fixed an issue where clusters could become non-operational when nodes had multiple network interfaces and the Redis interface was not first in the interface enumeration order. + +## Version changes + +### Supported platforms + +The following table provides a snapshot of supported platforms as of this Redis Enterprise Software release. See the [supported platforms reference]({{< relref "/operate/rs/references/supported-platforms" >}}) for more details about operating system compatibility. + + Supported – The platform is supported for this version of Redis Enterprise Software and Redis Stack modules. + +:warning: Deprecation warning – The platform is still supported for this version of Redis Enterprise Software, but support will be removed in a future release. + +| Redis Software
major versions | 7.22 | 7.8 | 7.4 | 7.2 | 6.4 | 6.2 | +|---------------------------------|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| +| **Release date** | May 2025 | Nov 2024 | Feb 2024 | Aug 2023 | Feb 2023 | Aug 2021 | +| [**End-of-life date**]({{< relref "/operate/rs/installing-upgrading/product-lifecycle#endoflife-schedule" >}}) | Determined after
next major release | May 2027 | Nov 2026 | Feb 2026 | Aug 2025 | Feb 2025 | +| **Platforms** | | | | | | | +| RHEL 9 &
compatible distros[1](#table-note-1) | | | | – | – | – | +| RHEL 9
FIPS mode[5](#table-note-5) | | | – | – | – | – | +| RHEL 8 &
compatible distros[1](#table-note-1) | | | | | | | +| RHEL 7 &
compatible distros[1](#table-note-1) | – | – | – | :warning: | | | +| Ubuntu 22.04[2](#table-note-2) | | | – | – | – | – | +| Ubuntu 20.04[2](#table-note-2) | | | | | | – | +| Ubuntu 18.04[2](#table-note-2) | – | – | :warning: | :warning: | | | +| Ubuntu 16.04[2](#table-note-2) | – | – | – | :warning: | | | +| Amazon Linux 2 | | | | | | – | +| Amazon Linux 1 | – | – | – | | | | +| Kubernetes[3](#table-note-3) | | | | | | | +| Docker[4](#table-note-4) | | | | | | | + +1. The RHEL-compatible distributions CentOS, CentOS Stream, Alma, and Rocky are supported if they have full RHEL compatibility. Oracle Linux running the Red Hat Compatible Kernel (RHCK) is supported, but the Unbreakable Enterprise Kernel (UEK) is not supported. + +2. The server version of Ubuntu is recommended for production installations. The desktop version is only recommended for development deployments. + +3. See the [Redis Enterprise for Kubernetes documentation]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) for details about support per version and Kubernetes distribution. + +4. [Docker images]({{< relref "/operate/rs/installing-upgrading/quickstarts/docker-quickstart" >}}) of Redis Enterprise Software are certified for development and testing only. + +5. Supported only if [FIPS was enabled during RHEL installation](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/switching-rhel-to-fips-mode_security-hardening#proc_installing-the-system-with-fips-mode-enabled_switching-rhel-to-fips-mode) to ensure FIPS compliance. + +## Downloads + +The following table shows the SHA256 checksums for the available packages: + +| Package | SHA256 checksum (7.22.0-241 July release) | +|---------|---------------------------------------| +| Ubuntu 20 | f7ee57058b7db2e1f8e861253d07290e38a0426a706268f4658336e2c443e3ff | +| Ubuntu 22 | 72d9c6dbf4d15ace5a7003ca2cecc3bd534ed76cb66d7751a03e53693f8f3e1e | +| Red Hat Enterprise Linux (RHEL) 8 | be3a285252f90654485cb3272ad9c793a774ab361359eed09564caac2f995851 | +| Red Hat Enterprise Linux (RHEL) 9 | ec43ca4e139370c5bd8ad58180857ad13372aaae97a0246a7c9560ae0209d8ae | +| Amazon Linux 2 | 6d7d6bae26864fbc09f38820ad535f3aba94ee6572afaa3f8c5c1b5f67b33d63 | + +## Known issues + +- RS131972: Creating an ACL that contains a line break in the Cluster Manager UI can cause shard migration to fail due to ACL errors. + +- RS155734: Endpoint availability metrics do not work as expected due to a calculation error. + +- RS156391: The `job_scheduler`'s memory usage can increase significantly when the diagnostic logging service is enabled. + +- RS153589: The metrics stream engine preview reports incorrect latency metrics. + +## Known limitations + +#### Upload modules before OS upgrade + +If the cluster contains any databases that use modules, you must upload module packages for the target OS version to a node in the existing cluster before you upgrade the cluster's operating system. + +See [Upgrade a cluster's operating system]({{}}) for detailed upgrade instructions. + +#### New Cluster Manager UI limitations + +The following legacy UI features are not yet available in the new Cluster Manager UI: + +- Purge an Active-Active instance. + + Use [`crdb-cli crdb purge-instance`]({{< relref "/operate/rs/references/cli-utilities/crdb-cli/crdb/purge-instance" >}}) instead. + +- Search and export the log. + +#### RedisGraph prevents upgrade to RHEL 9 + +You cannot upgrade from a prior RHEL version to RHEL 9 if the Redis Enterprise Software cluster contains a RedisGraph module, even if unused by any database. The [RedisGraph module has reached End-of-Life](https://redis.com/blog/redisgraph-eol/) and is completely unavailable in RHEL 9. + +#### Query results might include hash keys with lazily expired fields + +If one or more fields of a hash key expire after an `FT.SEARCH` or `FT.AGGREGATE` query begins, Redis does not account for these lazily expired fields. As a result, keys with expired fields might still be included in the query results, leading to potentially incorrect or inconsistent results. + +#### Active defragmentation does not stop mid-key for JSON + +Active defragmentation does not stop mid-key for JSON data. Large keys are defragmented in full, which might cause latency spikes. + +## Security + +#### Open source Redis security fixes compatibility + +As part of Redis's commitment to security, Redis Enterprise Software implements the latest [security fixes](https://github.com/redis/redis/releases) available with [open source Redis](https://github.com/redis/redis). Redis Enterprise Software has already included the fixes for the relevant CVEs. + +Some CVEs announced for open source Redis do not affect Redis Enterprise Software due to different or additional functionality available in Redis Enterprise Software that is not available in open source Redis. + +Redis Enterprise Software 7.22.0-241 supports open source Redis 7.4, 7.2, and 6.2. Below is the list of open source Redis CVEs fixed by version. + +Redis 7.4.x: + +- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution. + +- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service. + +Redis 7.2.x: + +- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution. + +- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service. + +- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution. + +- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes. + +- (CVE-2023-41056) In some cases, Redis may incorrectly handle resizing of memory buffers, which can result in incorrect accounting of buffer sizes and lead to heap overflow and potential remote code execution. + +- (CVE-2023-41053) Redis does not correctly identify keys accessed by `SORT_RO` and, as a result, may grant users executing this command access to keys that are not explicitly authorized by the ACL configuration. (Redis 7.2.1) + +Redis 7.0.x: + +- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution. + +- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes. + +- (CVE-2023-41056) In some cases, Redis may incorrectly handle resizing of memory buffers, which can result in incorrect accounting of buffer sizes and lead to heap overflow and potential remote code execution. + +- (CVE-2023-41053) Redis does not correctly identify keys accessed by `SORT_RO` and, as a result, may grant users executing this command access to keys that are not explicitly authorized by the ACL configuration. (Redis 7.0.13) + +- (CVE-2023-36824) Extracting key names from a command and a list of arguments may, in some cases, trigger a heap overflow and result in reading random heap memory, heap corruption, and potentially remote code execution. Specifically: using `COMMAND GETKEYS*` and validation of key names in ACL rules. (Redis 7.0.12) + +- (CVE-2023-28856) Authenticated users can use the `HINCRBYFLOAT` command to create an invalid hash field that will crash Redis on access. (Redis 7.0.11) + +- (CVE-2023-28425) Specially crafted `MSETNX` commands can lead to assertion and denial-of-service. (Redis 7.0.10) + +- (CVE-2023-25155) Specially crafted `SRANDMEMBER`, `ZRANDMEMBER`, and `HRANDFIELD` commands can trigger an integer overflow, resulting in a runtime assertion and termination of the Redis server process. (Redis 7.0.9) + +- (CVE-2023-22458) Integer overflow in the Redis `HRANDFIELD` and `ZRANDMEMBER` commands can lead to denial-of-service. (Redis 7.0.8) + +- (CVE-2022-36021) String matching commands (like `SCAN` or `KEYS`) with a specially crafted pattern to trigger a denial-of-service attack on Redis can cause it to hang and consume 100% CPU time. (Redis 7.0.9) + +- (CVE-2022-35977) Integer overflow in the Redis `SETRANGE` and `SORT`/`SORT_RO` commands can drive Redis to OOM panic. (Redis 7.0.8) + +- (CVE-2022-35951) Executing an `XAUTOCLAIM` command on a stream key in a specific state, with a specially crafted `COUNT` argument, may cause an integer overflow, a subsequent heap overflow, and potentially lead to remote code execution. The problem affects Redis versions 7.0.0 or newer. (Redis 7.0.5) + +- (CVE-2022-31144) A specially crafted `XAUTOCLAIM` command on a stream key in a specific state may result in heap overflow and potentially remote code execution. The problem affects Redis versions 7.0.0 or newer. (Redis 7.0.4) + +- (CVE-2022-24834) A specially crafted Lua script executing in Redis can trigger a heap overflow in the cjson and cmsgpack libraries, and result in heap corruption and potentially remote code execution. The problem exists in all versions of Redis with Lua scripting support, starting from 2.6, and affects only authenticated and authorized users. (Redis 7.0.12) + +- (CVE-2022-24736) An attacker attempting to load a specially crafted Lua script can cause NULL pointer dereference which will result in a crash of the `redis-server` process. This issue affects all versions of Redis. (Redis 7.0.0) + +- (CVE-2022-24735) By exploiting weaknesses in the Lua script execution environment, an attacker with access to Redis can inject Lua code that will execute with the (potentially higher) privileges of another Redis user. (Redis 7.0.0) + +Redis 6.2.x: + +- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution. + +- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service. + +- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution. + +- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes. + +- (CVE-2023-28856) Authenticated users can use the `HINCRBYFLOAT` command to create an invalid hash field that will crash Redis on access. (Redis 6.2.12) + +- (CVE-2023-25155) Specially crafted `SRANDMEMBER`, `ZRANDMEMBER`, and `HRANDFIELD` commands can trigger an integer overflow, resulting in a runtime assertion and termination of the Redis server process. (Redis 6.2.11) + +- (CVE-2023-22458) Integer overflow in the Redis `HRANDFIELD` and `ZRANDMEMBER` commands can lead to denial-of-service. (Redis 6.2.9) + +- (CVE-2022-36021) String matching commands (like `SCAN` or `KEYS`) with a specially crafted pattern to trigger a denial-of-service attack on Redis can cause it to hang and consume 100% CPU time. (Redis 6.2.11) + +- (CVE-2022-35977) Integer overflow in the Redis `SETRANGE` and `SORT`/`SORT_RO` commands can drive Redis to OOM panic. (Redis 6.2.9) + +- (CVE-2022-24834) A specially crafted Lua script executing in Redis can trigger a heap overflow in the cjson and cmsgpack libraries, and result in heap corruption and potentially remote code execution. The problem exists in all versions of Redis with Lua scripting support, starting from 2.6, and affects only authenticated and authorized users. (Redis 6.2.13) + +- (CVE-2022-24736) An attacker attempting to load a specially crafted Lua script can cause NULL pointer dereference which will result in a crash of the `redis-server` process. This issue affects all versions of Redis. (Redis 6.2.7) + +- (CVE-2022-24735) By exploiting weaknesses in the Lua script execution environment, an attacker with access to Redis can inject Lua code that will execute with the (potentially higher) privileges of another Redis user. (Redis 6.2.7) + +- (CVE-2021-41099) Integer to heap buffer overflow handling certain string commands and network payloads, when `proto-max-bulk-len` is manually configured to a non-default, very large value. (Redis 6.2.6) + +- (CVE-2021-32762) Integer to heap buffer overflow issue in `redis-cli` and `redis-sentinel` parsing large multi-bulk replies on some older and less common platforms. (Redis 6.2.6) + +- (CVE-2021-32761) An integer overflow bug in Redis version 2.2 or newer can be exploited using the `BITFIELD` command to corrupt the heap and potentially result with remote code execution. (Redis 6.2.5) + +- (CVE-2021-32687) Integer to heap buffer overflow with intsets, when `set-max-intset-entries` is manually configured to a non-default, very large value. (Redis 6.2.6) + +- (CVE-2021-32675) Denial Of Service when processing RESP request payloads with a large number of elements on many connections. (Redis 6.2.6) + +- (CVE-2021-32672) Random heap reading issue with Lua Debugger. (Redis 6.2.6) + +- (CVE-2021-32628) Integer to heap buffer overflow handling ziplist-encoded data types, when configuring a large, non-default value for `hash-max-ziplist-entries`, `hash-max-ziplist-value`, `zset-max-ziplist-entries` or `zset-max-ziplist-value`. (Redis 6.2.6) + +- (CVE-2021-32627) Integer to heap buffer overflow issue with streams, when configuring a non-default, large value for `proto-max-bulk-len` and `client-query-buffer-limit`. (Redis 6.2.6) + +- (CVE-2021-32626) Specially crafted Lua scripts may result with Heap buffer overflow. (Redis 6.2.6) + +- (CVE-2021-32625) An integer overflow bug in Redis version 6.0 or newer can be exploited using the STRALGO LCS command to corrupt the heap and potentially result with remote code execution. This is a result of an incomplete fix by CVE-2021-29477. (Redis 6.2.4) + +- (CVE-2021-29478) An integer overflow bug in Redis 6.2 could be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves changing the default set-max-intset-entries configuration value, creating a large set key that consists of integer values and using the COPY command to duplicate it. The integer overflow bug exists in all versions of Redis starting with 2.6, where it could result with a corrupted RDB or DUMP payload, but not exploited through COPY (which did not exist before 6.2). (Redis 6.2.3) + +- (CVE-2021-29477) An integer overflow bug in Redis version 6.0 or newer could be exploited using the STRALGO LCS command to corrupt the heap and potentially result in remote code execution. The integer overflow bug exists in all versions of Redis starting with 6.0. (Redis 6.2.3) diff --git a/layouts/home.html b/layouts/home.html index 270aec3134..d5ba4cd856 100644 --- a/layouts/home.html +++ b/layouts/home.html @@ -22,7 +22,7 @@

{{ .Title }}

+ placeholder="Ask our AI-powered Redis copilot a question…" maxlength="500" type="text" value="" tabindex=""/> diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html index 243916f8e9..4eef3d945e 100644 --- a/layouts/partials/scripts.html +++ b/layouts/partials/scripts.html @@ -9,18 +9,24 @@ const wrapper = document.createElement('div'); if (block.parentElement.classList.contains("expand-content")) { - wrapper.style = 'position:absolute;top:10px;right:20px;z-index:1;display:flex;align-items:center;gap:6px;'; + wrapper.style = 'position:absolute;top:24px;right:20px;z-index:1;display:flex;align-items:center;gap:6px;'; } else { - wrapper.style = 'position:absolute;top:10px;right:10px;z-index:1;display:flex;align-items:center;gap:6px;'; + wrapper.style = 'position:absolute;top:24px;right:10px;z-index:1;display:flex;align-items:center;gap:6px;'; } + + // Check if this is a YAML embed with download functionality + const yamlContainer = block.closest('.yaml-embed-container'); + const downloadFilename = yamlContainer ? yamlContainer.getAttribute('data-download-filename') : null; + // Create the copy button const button = document.createElement('button'); + button.className = 'clipboard-button text-neutral-400 hover:text-slate-100 bg-slate-600 relative h-8 w-8 p-1 rounded rounded-mx'; + button.title = 'Copy to clipboard'; button.innerHTML = ` -