{"id":16479993,"url":"https://github.com/redis/redis-insight-guides","last_synced_at":"2025-03-23T11:33:07.348Z","repository":{"id":36954283,"uuid":"459146918","full_name":"redis/Redis-Insight-Guides","owner":"redis","description":"Learn modern data models and data processing tools bundled in Redis Stack to build real-time applications with the speed and stability of Redis.","archived":false,"fork":false,"pushed_at":"2024-09-11T13:44:12.000Z","size":2030,"stargazers_count":6,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-17T12:22:37.193Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-14T12:08:54.000Z","updated_at":"2024-12-07T18:04:52.000Z","dependencies_parsed_at":"2024-10-10T23:32:52.708Z","dependency_job_id":"958f15aa-ad65-4ea6-b89b-d367e2aa5a58","html_url":"https://github.com/redis/Redis-Insight-Guides","commit_stats":null,"previous_names":["redis-insight/guides","redisinsight/guides","redis/redis-insight-guides"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2FRedis-Insight-Guides","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2FRedis-Insight-Guides/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2FRedis-Insight-Guides/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redis%2FRedis-Insight-Guides/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redis","download_url":"https://codeload.github.com/redis/Redis-Insight-Guides/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245097159,"owners_count":20560311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T13:00:22.948Z","updated_at":"2025-03-23T11:33:06.453Z","avatar_url":"https://github.com/redis.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **Redis Insight Guides are no longer actively maintained or supported.** \u003cbr\u003e\n\u003e Check our [tutorials](https://github.com/RedisInsight/Tutorials) to find helpful use cases, comments, and related demonstrations of Redis features to help you level up your Redis game.\n\n## Introduction\n![Quick Guides UI](docs/guides.png)\n\nThe Quick Guides are documents that contain sets of instructions, commands, and comments. Users can use built-in guides in order to gain an understanding of a certain Redis subject, which accelerates the adoption of Redis features among the Redis community.\n\nThe content of the Quick Guides can be updated independently without a need to update the entire application.\n\nThis document provides an overview of the Quick Guides structure, its elements and contains instructions, recommendations, and best practices for updating the content of Quick Guides.\n\n## Navigation\n\n1. [Examples](#Examples)\n2. [Structure](#Structure)\n3. [Pages](#Pages)\n4. [Autoupdate Flow](#Autoupdate)\n5. [Development Flow](#Development)\n\n## Examples\nDownload this example with Redis Stack Tutorials and upload the archive using the \"Upload Tutorial\" feature in Workbench so you can view and work with them in Redis Insight.\n\n[Redis Stack Tutorials.zip](https://github.com/RedisInsight/Guides/raw/main/files/Redis.Stack.Tutorials.zip)\n\nTo upload your own tutorials, specify a link or folder path to a .zip archive with your tutorials.\n\nBelow you can find information about the structure and logic for creating your own tutorials.\n\n\n## Structure\nQuick Guides allows you to render recursive objects, such as a file directory.\n\nOn the root level of guides folder, we have `manifest.json` and all necessary static files (markdowns, images, etc.)\n\nThe content of this area is generated based on Nodes specified inside `manifest.json`.\nThis JSON file is described as a simple [Objects](https://javascript.info/object) which represents tree node and might have children nodes inside.\n\nManifest file should start with single Node and should have properties described \nbelow (it will be displayed as type \"group\"):\n\n| Prop                    | Type                     | Description                                                                                                                   |\n|-------------------------|--------------------------|-------------------------------------------------------------------------------------------------------------------------------|\n| label (**required**)    | string                   | Label that will be displayed on UI for Node                                                                                   |\n| children (**required**) | Node[]                   | List of Nodes (nested groups or markdown files)                                                                               |\n| type                    | \"group\", \"internal-link\" | This field is **required** for default guides, for user guides no reason to specify anything - it will be override to \"group\" |\n| keywords                | string[]                 | Used for tags/labels                                                                                                          |\n| author                  | string                   | Author name                                                                                                                   |\n| URL                     | string                   | Link to repository/web-site                                                                                                   |\n| industry                | string[]                 | Tags to show relevant industry                                                                                                |\n| description             | string                   | Short description of tutorials                                                                                                |\n\nEach Node requires a `label`,`type` (all available properties are described in the table below).\n\n| Prop                 | Type                     | Description                                                                            |\n|----------------------|--------------------------|----------------------------------------------------------------------------------------|\n| id                   | string                   |                                                                                        |\n| type (**required**)  | \"group\", \"internal-link\" |                                                                                        |\n| label (**required**) | string                   | Label that will be displayed on UI for Node                                            |\n| children             | Node[]                   | Use only for \"group\" type                                                              |\n| args                 | Record\u003cstring, any\u003e      | A special set of parameters required by a certain type of node (each type has its own) |\n\nA Node can be represented by various UI components and is specified by `type` prop. Supported types are listed below.\n\n| Type            \t     | Description                                                                          \t   | Args                                                                                         |\n|-----------------------|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|\n| **\"internal-link\"** \t | A link that opens a page inside the Enablement Area \u003cbr\u003e (e.g. link to guide page).      | - \"path\" (required, string) - relative file path                                             |\n| **\"group\"**         \t | Grouping several nodes into one directory/folder. \u003cbr\u003e Allows you to create nested lists | - \"initialIsOpen\" (boolean) - The group will start in the open state (default value - false) |\n\n\u003e _**!Note.** All **\"internal-link\"** nodes located in the same **\"group\"** will be connected to each other. And using pagination (created dynamically) you can go directly from one page to another. Therefore, it is best to combine elements into groups related to the same topic._\n\n### Example with \"Document\" group and two guides inside it\n```json\n  {\n    \"type\": \"group\",\n    \"id\": \"document\",\n    \"label\": \"Document\",\n    \"args\": {\n      \"initialIsOpen\": true\n    },\n    \"children\": [\n      {\n        \"type\": \"internal-link\",\n        \"id\": \"introduction\",\n        \"label\": \"Introduction\",\n        \"args\": {\n          \"path\": \"/quick-guides/document/introduction.md\"\n        }\n      },\n      {\n        \"type\": \"internal-link\",\n        \"id\": \"learn-more\",\n        \"label\": \"Learn More\",\n        \"args\": {\n          \"path\": \"/quick-guides/document/learn-more.md\"\n        }\n      }\n    ]\n  }\n```\n## Pages\nBy using **\"internal-link\"** node we can open some [Markdown Guides](https://www.markdownguide.org/) located in guides folder.\n\nThese guides may contain the following elements:\n* Plain text\n* [Basic Markdown Syntax](https://www.markdownguide.org/basic-syntax/)\n* [Extended Markdown Syntax](https://www.markdownguide.org/extended-syntax/)\n* [HTML tags](https://www.markdownguide.org/basic-syntax/#html)\n* Images\n* Custom Syntax\n\n### Images\nBasic Markdown syntax provides the ability to render images. ([Image Markdown Syntax](https://www.markdownguide.org/basic-syntax/#images-1))\n\nYou can use a relative path to images inside the guides folder, using the following logic:\n\n- `./` means the current directory;\n- `../` means the parent of the current directory.\n\nFor example:\n\n```\n![RedisInsight Browser screenshot](./_images/aggregations.png)\n```\n\n#### Redis Code block\n![Redis Code block](docs/guides-redis-code-block.png)\n\n###### Manual-execute button\nA button that inserts Redis commands in the Editor. The syntax is almost the same as for the [Fenced Code Block](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks),\nthe only difference is that you must specify `redis` as language and the label next to it (`Create` in the example below).\n````\n ```redis Create\n    // Let's add three documents as Hashes.\n    // Each document represents a building permit.\n\n    HSET permit:1 \"description\" \"To reconstruct a single detached house with a front covered veranda.\" \"construction_value\" 42000 \"building_type\" \"single detached house\" \"address_city\" \"Lisbon\" \"work_type\" \"demolition,reconstruction\" \"permit_timestamp\" \"1602156878\" \"address_street\" \"R. Da Palma\" \"location\" \"38.717746, -9.135839\"\n\n    HSET permit:2 \"description\" \"To construct a loft\" \"construction_value\" 53000 \"building_type\" \"apartment\" \"address_city\" \"Porto\" \"work_type\" \"construction\" \"permit_timestamp\" \"1556546400\" \"address_street\" \"Rua da Boavista\" \"location\" \"41.155854, -8.616721\"\n\n    HSET permit:3 \"description\" \"New house build\" \"construction_value\" 260000 \"building_type\" \"house\" \"address_city\" \"Lagos\" \"work_type\" \"construction;design\" \"permit_timestamp\" \"1612947600\" \"address_street\" \"R. Antonio Gedeao\" \"location\" \"37.114864, -8.668521\"\n\n ```\n````\n\n###### Button parameters\n\nYou can customize the run parameters to configure the raw mode, pipeline parameter and group mode. If specified, they will override\nthe configuration set in Redis Insight. If not specified - the behaviour will be defined by parameters set in Redis Insight.\nTo specify the parameters, insert them after the `redis-auto:` and add the parameters in square brackets separated with a semicolon (`;`) in\nthe following way:\n\n```\nredis:[\u003cparameter1\u003e;\u003cparameter2\u003e;\u003c...\u003e;\u003cparameterN\u003e]\n```\n\nEnsure that all the parameters are listed **without spaces**, ordering does not matter.\n\n_Supported parameters:_\n\n| Name     | Values                   | Notes                                     | Description                                                                                                                                              |\n|----------|--------------------------|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|\n| results  | * _single_\u003cbr/\u003e* _group_\u003cbr/\u003e* _silent_ | If enabled, then pipeline mode is ignored | * _single_ - Disable the group mode to display the command results in a batch or as separate ones.\u003cbr/\u003e* _group_ - Enable the group mode \u003cbr/\u003e* _silent_:  \u003cbr/\u003e\u0026emsp; 1. Enable the group mode \u003cbr/\u003e\u0026emsp; 2. Auto collapse the result \u003cbr/\u003e\u0026emsp; 3. Show only error commands in the results|\n| mode     | * _ascii_\u003cbr/\u003e* _raw_    |                                           | Enable/disable the raw mode to display command results.                                                                                                                        |\n| pipeline | any integer number       |                                           | Configure the number of commands in the pipeline. 0 or 1 pipelines every command.                                                     |\n| auto | * _true_\u003cbr/\u003e* _false_       |                                           | Configure the auto execute commands after click on the button |\n\n\n_Notes:_\n\n* Ensure that there are no spaces\n* All the parameters with mistakes will be ignored\n\n_Examples:_\n\n```\nredis:[results=single]\nredis:[auto=true;mode=raw]\nredis:[pipeline=1]\nredis:[results=silent;mode=raw]\nredis:[results=single;pipeline=4]\nredis:[results=group;mode=ascii]\nredis:[auto=true;pipeline=8;mode=raw;results=single;]\n```\n\n###### Auto-execute button\n![img.png](docs/guides-redis-auto-code-block.png)\n\nA button that automatically executes the Redis commands (without inserting it into the Editor). Such buttons will be displayed with the \"Play\" icon inside.\nThe code syntax is the same as for the manually executed buttons, just insert parameter `[auto=true]` with any other parameters before the button.\n\n````\n ```redis:[auto=true;mode=raw] Create\n    // Let's add three documents as Hashes.\n    // Each document represents a building permit.\n\n    HSET permit:1 \"description\" \"To reconstruct a single detached house with a front covered veranda.\" \"construction_value\" 42000 \"building_type\" \"single detached house\" \"address_city\" \"Lisbon\" \"work_type\" \"demolition,reconstruction\" \"permit_timestamp\" \"1602156878\" \"address_street\" \"R. Da Palma\" \"location\" \"38.717746, -9.135839\"\n\n    HSET permit:2 \"description\" \"To construct a loft\" \"construction_value\" 53000 \"building_type\" \"apartment\" \"address_city\" \"Porto\" \"work_type\" \"construction\" \"permit_timestamp\" \"1556546400\" \"address_street\" \"Rua da Boavista\" \"location\" \"41.155854, -8.616721\"\n\n    HSET permit:3 \"description\" \"New house build\" \"construction_value\" 260000 \"building_type\" \"house\" \"address_city\" \"Lagos\" \"work_type\" \"construction;design\" \"permit_timestamp\" \"1612947600\" \"address_street\" \"R. Antonio Gedeao\" \"location\" \"37.114864, -8.668521\"\n\n ```\n````\n\n## Autoupdate\n\u003e _Works only with default guides_\n\nOur application supports the ability to quickly update the static files of the Enablement area so that we can provide users with up-to-date information.\n\nEA guides auto-update flow:\n1. Push commit with updates to `/guides` repository branch\n2. Approve guides release in CircleCI.\n3. Reopen the Redis Insight with a working internet connection. In the background, new files will be downloaded to the user's local home directory:\n    * **Mac**: In the `/Users/\u003cyour-username\u003e/.redisinsight-v2/guides` directory.\n    * **Windows**: In the `C:\\Users\\\u003cyour-username\u003e\\.redisinsight-v2\\guides` directory.\n    * **Linux**: In the `/home/\u003cyour-username\u003e/.redisinsight-v2/guides` directory.\n4. Open Enablement area on UI\n\n![guides-autoupdate-flow](docs/guides-auto-update-flow.png)\n\n## Development\nLet's imagine that we need to add a new group (Streams) with 2 pages (Basics, Getting data).\n\nStep by step implementation would be as follows:\n1. First of all, it's best to create new pages locally and make sure that everything looks like it was planned.\n2. Clone Guides repository (if you haven't done it before) and go into `\u003cfolder to guides repo\u003e/src`\n3. Create a new branch from the `main`\n4. Add new `streams` folder with `basics.md` and `getting-data.md`. As a result, the folder structure will look something like this.\n```\nguides\n \u003e quick-guides\n   \u003e document\n   \u003e streams\n     basics.md\n     getting-data.md\n manifest.json\n```\n5. Add new nodes inside `manifest.json`\n```json\n  {\n    \"type\": \"group\",\n    \"id\": \"quick-guides\",\n    \"label\": \"QUICK GUIDES\",\n    \"children\": [\n      {\n        \"type\": \"group\",\n        \"id\": \"streams\",\n        \"label\": \"Streams\",\n        \"children\": [\n          {\n            \"type\": \"internal-link\",\n            \"id\": \"basics\",\n            \"label\": \"Basics\",\n            \"args\": {\n              \"path\": \"/quick-guides/streams/basics.md\"\n            }\n          },\n          {\n            \"type\": \"internal-link\",\n            \"id\": \"getting-data\",\n            \"label\": \"Get Data\",\n            \"args\": {\n              \"path\": \"/quick-guides/streams/getting-data.md\"\n            }\n          }\n        ]\n      }\n    ]\n  }\n```\n6. Fill markdowns with content.\n\n`basics.md`\n````\nFor the goal of understanding what Redis Streams are and how to use them, we will ignore all the advanced features, and instead focus on the data structure itself, in terms of commands used to manipulate and access it.\nThis is, basically, the part that is common to most of the other Redis data types, like Lists, Sets, Sorted Sets and so forth.\nHowever, note that lists also have an optional more complex blocking API, exported by commands like BLPOP and similar.\nSo streams are not much different than lists in this regard, it's just that the additional API is more complex and more powerful.\n\nBecause Streams are an append-only data structure, the fundamental write command, called **XADD**, appends a new entry into the specified stream.\nA stream entry is not just a string but is instead composed of one or multiple field-value pairs.\nThis way, each entry of a stream is already structured, like an append-only file written in CSV format where multiple separated fields are present in each line.\n\n```redis Create\nXADD mystream * sensor-id 1234 temperature 19.8\n```\n\n````\n\n`getting-data.md`\n````\nQuerying by range: **XRANGE** and **XREVRANGE*\nTo query the stream by the range we are only required to specify two IDs, _start_ and _end_.\nThe range returned will include the elements having start or end as ID, so the range is inclusive. The two special IDs - and + respectively mean the smallest and the greatest ID possible.\n\n```redis XRANGE\nXRANGE mystream - +\n```\n\n```redis XREVRANGE\nXREVRANGE mystream + - COUNT 1\n```\n\n\n````\n7. Open **Redis Insight** application with `GUIDES_DEV_PATH` environment variable GUIDES_DEV_PATH='\u003cpath to Guides repo\u003e/src\u003e' ./\u003cpath to Redis Insight binary\u003e\n\n   Example on Linux: `GUIDES_DEV_PATH='/home/user/projects/Guides/src' ./home/user/programms/RedisInsight.AppImage`\n8. Make sure that everything looks fine.\n\n![guides-gif](docs/guides.gif)\n\n9. After that, just commit and push, and then create Pull Request to the main branch. (Release flow described in the [Autoupdate Flow](#Autoupdate) section).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredis%2Fredis-insight-guides","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredis%2Fredis-insight-guides","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredis%2Fredis-insight-guides/lists"}