{"id":22678447,"url":"https://github.com/web2solutions/redis-em-5-minutos","last_synced_at":"2025-03-29T13:12:38.434Z","repository":{"id":149299653,"uuid":"350880452","full_name":"web2solutions/redis-em-5-minutos","owner":"web2solutions","description":"🇧🇷  🇵🇹 Tutorial rápido de Redis para desenvolvedores de língua portuguesa.","archived":false,"fork":false,"pushed_at":"2021-03-26T19:15:20.000Z","size":172,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-04T13:44:42.541Z","etag":null,"topics":["redis","redis-cache","redis-client","redis-database","redis-queue"],"latest_commit_sha":null,"homepage":"https://web2solutions.github.io/redis-em-5-minutos/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/web2solutions.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2021-03-23T22:57:44.000Z","updated_at":"2023-03-08T03:37:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"40d47f70-8d07-42a2-bbd6-14b784d2c54b","html_url":"https://github.com/web2solutions/redis-em-5-minutos","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web2solutions%2Fredis-em-5-minutos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web2solutions%2Fredis-em-5-minutos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web2solutions%2Fredis-em-5-minutos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/web2solutions%2Fredis-em-5-minutos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/web2solutions","download_url":"https://codeload.github.com/web2solutions/redis-em-5-minutos/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246187242,"owners_count":20737462,"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":["redis","redis-cache","redis-client","redis-database","redis-queue"],"created_at":"2024-12-09T18:15:21.741Z","updated_at":"2025-03-29T13:12:38.427Z","avatar_url":"https://github.com/web2solutions.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg align=\"center\" src=\"https://i.imgur.com/cJjTcYk.png\" /\u003e\n\n# Redis em 5 minutos\n\nConteúdo em português com o objetivo de mitigar o uso do Redis de forma simples, objetiva e `quase` completa.\n\n## Índice de navegação:\n\n- [**O que é o Redis?**](#oquee)\n- [**Tipos de dados**](#tipos)\n  1. [`Sequência de caracteres`](#string)\n  2. [`Mapa / Dicionário`](#hash)\n  3. [`Lista`](#list)\n  4. [`Conjunto`](#set)\n  5. [`Conjunto Ordenado`](#sortedset)\n  6. [`Index Geo Espacial`](#geo)\n  7. [`Mapa de bits`](#bitmap)\n  8. [`HyperLogLog`](#hyper)\n  9. [`Streams`](#stream)\n- [**Manipulando dados**]()\n  1. [`Sequência de caracteres`](#mstring)\n  2. [`Mapa / Dicionário`](#mhash)\n  3. [`Lista`](#mlist)\n  4. [`Conjunto`](#mset)\n  5. [`Conjunto Ordenado`](#msortedset)\n  6. [`Index Geo Espacial`](#mgeo)\n  7. [`Mapa de bits`](#mbitmap)\n  8. [`HyperLogLog`](#mhyper)\n  9. [`Streams`](#mstream)\n\n\n--------------------------\n\n## \u003ca name=\"oquee\"\u003e\u003c/a\u003e O que é o Redis?\n\n\u003e Cache? Banco de Dados? Mediador de Mensagens?\n\nO redis é um `armazenador` **em memória** `de estrutura de dados`, que utiliza o mecanismo do tipo `chave/valor` (`key/value`) para acesso á dados. Isto significa que para armazenar qualquer `valor`, uma `chave de acesso` é atribuída á aquele valor. Para se acessar um `valor` é necessário conhecer sua `chave`.\n\nO termo: `estrutura de dados` refere-se ao fato dos `valores` das `chaves` armazenadas poderem conter `estrutura de dados complexas`.\n\nComumente, Redis é utilizado para implementar `cache` enquanto o banco de dados principal é um RDBMS ou um NoSQL (baseado em disco).\n\nO que faz o Redis ser diferente de outras implementações de cache é sua velocidade e capacidade de persistir dados no disco.\n\nAlém disso, Redis pode ser usado como `banco de dados` e `Corretor/Mediador de Mensagens`. \n\nCenários onde o Redis armazena dados que não são armazenados em nenhum outro lugar, fazem do Redis um banco de dados.\n\nComo `Mediador de Mensagens`, o Redis implementa o padrão `Publicar/Assinar` (`Publish/Subscribe`) paralelamente á estrutura de dados (particularmente as Listas)\n\n--------------------------\n\n## \u003ca name=\"tipos\"\u003e\u003c/a\u003e Tipos de `estruturas de dados` que o Redis oferece:\n\n### \u003ca name=\"string\"\u003e\u003c/a\u003e String\n\nSequência de caracteres. É a estrutura de dados mais `simples` do Redis.\n\nOperações atômicas.\n\n\n### \u003ca name=\"hash\"\u003e\u003c/a\u003e Hash \n\nConhecido como Mapa, Dicionário ou vetor associativo.\n\nAcesso e manipulação rápida de dados.\n\nBasicamente é uma coleção de `campo/valor`\n\nÉ a estrutura de dados mais flexível do Redis. O redis funciona exatamente como um hash.\n\nExemplo de Uso: Session, Perfil de Usuário, Documentos JSON\n\n\n### \u003ca name=\"list\"\u003e\u003c/a\u003e List\n\nLista Ordenada de Strings com índices numérico.\n\nTempo: O(1) para adicionar ou remover itens mesmo com milhões de items\n\nExemplo de Uso: Filas. Facilita a implementação do padrão `assíncrono` `produtor-consumidor`.\n\n\n### \u003ca name=\"set\"\u003e\u003c/a\u003e Set (Conjunto)\n\nConjunto desordenado de Strings únicas.\nOferece comandos para `Diferença`, `Interseção` e `União`\nSão mais perfomáticos do que `hash` para solucionar problemas de `filiação`, por exemplo: `Esse item está presente nesse conjunto de dados?`\n\nExemplo de Uso: `Interesses` de um consumidor, `Conjunto de Amigos` de um usuário.\n\n\n\n### \u003ca name=\"sortedset\"\u003e\u003c/a\u003e Sorted Set with range queries\n\nConjunto ordenado por `classificação` de Strings únicas. Ao armazenar um valor, é associado a sua pontuaçào que é um valor.\n\n`Alta performance` em `ordenamento`\n\nBom para buscar dados ordenados via classificação numérica e de forma simples.\n\nExemplo de Uso: Coleção de dados do tipo `série temporal`, lances de um leilão, compras X valor de compra, itens mais visualizados, quadro de classificação de um game.\n\n\n### \u003ca name=\"geo\"\u003e\u003c/a\u003e Geospatial index\n\nÉ uma `forma especial` da implementação de `Conjunto Ordenado`, onde a classificação númerica do item é uma coordenada geográfica.\n\nMuito rápido para implementação de buscas dentro de uma área específica.\n\n\n\n### \u003ca name=\"bitmap\"\u003e\u003c/a\u003e Bitfield - Bitmap\n\n`Vetores` de `Bit` são usados para `contar` informações, mas limitando o consumo de memória.\n\nIdeal para casos onde é necessário lidar com grande volume de dados e consumir memória de forma eficiente.\n\n\n### \u003ca name=\"hyper\"\u003e\u003c/a\u003e HyperLogLog\n\nÉ uma estrutura de dados usada para estimar/contar itens únicos. Foco em eficiência de memória e processamento.\n\n\n### \u003ca name=\"stream\"\u003e\u003c/a\u003e Stream\n\nFluxo de dados\n\nImplementa uma estrutura de dados do tipo fluxo de log. Primariamente funciona no modo `acrescentar informações no final` somente.\n\nÉ a estrutura de dados mais complex do Redis\n\nPermite um grupo de clientes cooperar entre si, consumindo uma porção diferente do mesmo stream de mensagems.\n\nNão é muito diferente de uma `Lista`, exceto pelo fato de possuir uma API `blocking` mais completa.\n\nÉ composto por `um` ou mais `pares` de `campo-valor`\n\nOs fluxos de dados do Redis oferecem suporte a consultas de intervalo por ID. \n\n\n--------------------------\n\n## Comandos\n\n**Iniciar Redis informando um arquivo de configuração**\n\n```bash\n  redis-server /path/redis.conf\n```\n\n**Iniciar o prompt do Redis**\n\n```bash\n  redis-cli\n```\n--------------------------\n\n## Manipulando Strings.\n\n\n```bash\n  # cria uma chave com um valor associado\n  \u003e SET chave valor\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # cria uma chave com um valor associado SE a chave não existir\n  \u003e SETNX chave valor\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # recupera o valor de uma chave\n  \u003e GET chave\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # associa um novo valor á chave especificada e retorna o valor antigo da chave\n  \u003e GETSET chave valor\n\n  # Tempo: O(1)\n```\n\n```bash\n  # Adiciona um valor ao final do valor de uma chave\n  \u003e APPEND chave value\n  \n  # Tempo: \n```\n\n\n\n```bash\n  # recupera o comprimento de um valor associado á chave dada.\n  \u003e STRLEN chave\n  \n  # Tempo: \n```\n\n```bash\n  # cria múltiplas chaves com um valor associado\n  \u003e MSET chave1 valor1 chave2 valor2\n  \n  # Tempo: O(1) para setar cada chave\n```\n\n```bash\n  # cria múltiplas chaves com um valor associado, somente se nenhuma das chaves existirem\n  \u003e MSETNX chave1 valor1 chave2 valor2\n  \n  # Tempo: O(1) para setar cada chave\n```\n\n```bash\n  # recupera o valor de múltiplas chaves\n  \u003e MGET chave1 chave2\n  \n  # Tempo: O(1) para cada chave\n```\n\n```bash\n  # substituir parte da string armazenada na chave na posição especificada\n  # SET chave \"Hello World\"\n  \u003e SETRANGE chave 6 \"Redis\"\n  # \"Hello Redis\"\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # recupera uma substring do valor armazenado na chave, determinada pelas posições \n  # inicio e fim (ambos inclusivos). \n  # -1 no fim significa até o último char\n  # -2 no fim significa até o penúltimo char\n  \u003e GETRANGE chave inicio fim\n  # Ex: \n  # SET chave \"Isto é uma substring\"\n  # GETRANGE chave 0 3\n  # \"Isto\"\n  \n  # Tempo: O(n)\n```\n\n```bash\n  # Conta o número de conjunto de bits em uma string.\n  \u003e BITCOUNT key [start end]          \n  \n  # Tempo: O(n)\n```\n\n\n--------------------------\n\n## Manipulando Contadores.\n\n\n\n```bash\n  # incrementa em mais 1 o valor de uma chave to tipo contador\n  \u003e INCR chave\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # incrementa em mais X o valor de uma chave to tipo contador, onde X é um número inteiro\n  \u003e INCRBY chave numero\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # incrementa em mais X o valor de uma chave to tipo contador, onde X é um número float\n  \u003e INCRBYFLOAT chave numero\n  \n  # Tempo: \n```\n\n```bash\n  # Decrementa em menos 1 o valor de uma chave to tipo contador\n  \u003e DECR chave\n\n  # Tempo: O(1)\n```\n\n```bash\n  # incrementa em menos X o valor de uma chave to tipo contador, onde X é um número\n  \u003e DECRBY chave numero\n\n  # Tempo: O(1)\n```\n\n--------------------------\n\n\n## Manipulando Lists.\n\nListas\n\nConceito básico, listas se comportam como uma fila, onde o primeiro que entra, é o primeiro que sai (FIFO - `First in, First out`). Diferente de um vetor padrão, a contagem começa da direta pra esquerda.\n\n```bash\n  # adiciona um ou mais itens no `começo` da lista fila_atendimento\n  \u003e RPUSH fila_atendimento 'Jose Eduardo' 'Maria da Silva' 'Renato Casagrande' 'Daylla Reis'\n  \n  # Os itens são indexados na mesma ordem dos valores dados.\n  # 'Jose Eduardo' 'Maria da Silva' 'Renato Casagrande' 'Daylla Reis'\n  # Tempo: O(1) para cada elemento\n```\n\n```bash\n  # adiciona um ou mais itens no `começo` da lista, SOMENTE SE a chave já existir E \n  # armazenar uma lista\n  \u003e RPUSHX fila_atendimento 'Pedro Cabral'           \n  # 'Jose Eduardo' 'Maria da Silva' 'Renato Casagrande' 'Daylla Reis' 'Pedro Cabral'\n  # Tempo: O(1) para cada elemento\n```\n\n```bash\n  # adiciona um ou mais itens na `final` da lista\n  \u003e LPUSH fila_atendimento 'Joe Biden'\n  \n  # 'Joe Biden' 'Jose Eduardo' 'Maria da Silva' 'Renato Casagrande' 'Daylla Reis' 'Pedro Cabral'\n\n  # Os itens são indexados inversamente ordenado\n  \n  # Exemplo:\n  \u003e LPUSH fila_atendimento2 'Jose Eduardo' 'Maria da Silva'\n  \u003e LRANGE fila_atendimento2 0 1 # 'Maria da Silva' 'Jose Eduardo' \n  \n  # Tempo: O(1) para cada elemento\n```\n\n```bash\n  # recupera sublista compreendida entre o dada a posição do index inicial e final.\n  # Caso forneça -1 como último valor, a busca compreenderá até o último item da lista\n  # Caso forneça -2 como último valor, a busca compreenderá até o penúltimo item\n  # da lista e assim sucessivamente\n  \u003e LRANGE fila_atendimento 0 -1\n  # \"Joe Biden\" \"Jose Eduardo\" \"Maria da Silva\" \"Renato Casagrande\" \"Daylla Reis\" \"Pedro Cabral\"\n\n  # Tempo: O(n)\n```\n\n```bash\n  # recupera um elemento de uma lista dado a posição de seu index\n  \u003e LINDEX fila_atendimento 1\n  # \"Jose Eduardo\"\n\n  # Tempo: O(n)\n```\n\n```bash\n  # adiciona um elemento antes ou depois de um elemento da lista\n  \u003e LINSERT fila_atendimento BEFORE 'Jose Eduardo' 'Joana Dark'\n  # \"Joe Biden\" \"Joana Dark\" \"Jose Eduardo\" \"Maria da Silva\" \"Renato Casagrande\" \n  # \"Daylla Reis\" \"Pedro Cabral\"\n  \n  \u003e LINSERT fila_atendimento AFTER 'Jose Eduardo' 'Maria Padilha'\n  # \"Joe Biden\" \"Joana Dark\" \"Jose Eduardo\" \"Maria Padilha\" \"Maria da Silva\" \n  # \"Renato Casagrande\" \"Daylla Reis\" \"Pedro Cabral\"\n\n  # Tempo: \n  # O(1) {se adicionar na saida da lista}  \n  # O(n) {se adicionar na entrada da lista}\n```\n\n```bash\n  # recupera o tamanho da fila\n  \u003e LLEN fila_atendimento                            \n  \n  # Tempo: O(1)\n```\n\n```bash\n  # seta o valor de um item da  lista dado o seu index e valor\n  \u003e LSET fila_atendimento 2 'Jose Eduardo Almeida'\n  # \"Joe Biden\" \"Joana Dark\" \"Jose Eduardo Almeida\" \"Maria Padilha\" \"Maria da Silva\" \n  # \"Renato Casagrande\" \"Daylla Reis\" \"Pedro Cabral\"\n\n  # Tempo: O(n) e O(1) se for no inicio ou final da lista\n```\n\n```bash\n  # corta uma lista de forma que ele compreenda somente os itens dado o alcance especificado\n  \u003e LTRIM fila_atendimento 1 4              \n  # \"Maria Padilha\" \"Maria da Silva\" \"Renato Casagrande\" \"Daylla Reis\"\n\n  # Tempo: O(n)\n```\n\n```bash\n  # atomicamente remove o PRIMEIRO elemento da lista e retorna ele (ÚLTIMO da fila)\n  \u003e LPOP fila_atendimento\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # remove o ÚLTIMO elemento da lista e retorna ele (PRIMEIRO da fila)\n  \u003e RPOP fila_atendimento\n  \n  # Tempo: O(n)\n```\n\n```bash\n  # atomicamente remove o ultimo elemento em uma lista (PRIMEIRO da fila), e adiciona no \n  # inicio de uma outra lista (ÚLTIMO da fila)\n  \u003e RPOPLPUSH fila_atendimento fila_atendimento_prioritario         \n  \n  # Tempo: O(1)\n```\n\n```bash\n  # versào blocking do LPOP. Remove e retorna o primeiro elemento da \n  # lista (ultimo da fila).\n  # Se o comando não encontrar nenhum item disponível em nenhuma das listas, \n  # ele bloqueará até alguém executar um LPUSH ou RPUSH em alguma das chaves\n  # 0 é o timeout\n  \u003e BLPOP fila_atendimento fila_atendimento_prioritario 0       \n  \n  # Tempo: O(1)\n```\n\n```bash\n  # versào blocking do  RPOP. Remove e retorna o último elemento de multiplas \n  # listas (primeiro da fila).\n  # Se o comando não encontrar nenhum item disponível em nenhuma das listas, \n  # ele bloqueará até alguém executar um LPUSH ou RPUSH em alguma das chaves\n  # 0 é o timeout\n  \u003e BRPOP fila_atendimento fila_atendimento_prioritario 0\n  \n  # Tempo: O(1)\n```\n\n--------------------------\n\n## Manipulando Sets.\n\nConjuntos\n\nConceito básico: como em um conjunto numérico, items não se repetem nunca.\n\n```bash\n  # Adiciona um ou mais membros em um conjunto \n  \u003e SADD amigos_do_joao 'Jose' 'Pedro' 'Daylla' 'James'\n\n  \u003e SADD amigos_da_maria 'Lily' 'Luiza' 'Daylla' 'Iza'\n  \n  # Tempo: O(1) para cada item\n```\n\n```bash\n  # recupera o número de membros em um conjunto\n  \u003e SCARD amigos_do_joao\n  # 3\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # Remove itens do conjunto\n  \u003e SREM amigos_do_joao 'Pedro'\n  # 'Jose' 'Daylla' 'James'\n  # Tempo: O(n)\n```\n\n```bash\n  # Checa se o valor dado é membro do conjunto\n  \u003e SISMEMBER amigos_do_joao 'Daylla'\n  # 1\n  # Tempo: O(1)\n```\n\n```bash\n  # retorna uma lista de todos  os membros do conjunto\n  \u003e SMEMBERS amigos_do_joao\n  \n  # Tempo: O(N) onde N é a cardinalidade do conjunto\n```\n\n```bash\n  # Faz a união de dois ou mais conjuntos\n  \u003e SUNION amigos_do_joao amigos_da_maria\n  # 'Jose' 'Pedro' 'Daylla' 'James' 'Lily' 'Luiza' 'Iza'\n\n  # Tempo: O(N)\n```\n\n```bash\n  # Faz a interseção de dois ou mais conjuntos\n  \u003e SINTER amigos_do_joao amigos_da_maria\n  # 'Daylla'\n\n  # Tempo: O(N*M) no pior cenário, onde N é a cardinalidade do menor grupo\n  #  e M é o número de conjuntos\n```\n\n```bash\n  # Move um item de um conjunto para outro conjunto\n  \u003e SMOVE amigos_do_joao amigos_da_maria 'Jose'\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # remove um ou multiplos items do conjunto de forma randômica \n  \u003e SPOP amigos_do_joao 2\n  \n  # Tempo: O(1)\n```\n\n--------------------------\n\n## Manipulando Sorted Sets\n\nConjuntos ordenados\n\n```bash\n  # adiciona um ou mais itens ao conjunto ordenado, caso já exista, atualiza o score\n  \u003e ZADD hackers 1940 \"Alan Kay\" 1906 \"Grace Hopper\" 1953 \"Richard Stallman\" 1965 \"Yukihiro Matsumoto\" 1916 \"Claude Shannon\"\n  \n  # Tempo: O(log(N)) para cada item adicionado\n```\n```bash\n  # recupera o número de itens em um grupo ordenado\n  \u003e ZCARD hackers\n  # 5\n  \n  # Tempo: O(1)\n```\n```bash\n  # conta os membros de um grupo ordenado dentro do intervalo de scores especificado\n  \u003e ZCOUNT hackers 1906 1930\n  #2\n  \n  # Tempo: O(log(N))\n```\n```bash\n  # incrementa o score de um membro em um grupo ordenado\n  \u003e ZINCRBY hackers 1 \"Alan Kay\"\n  # 1941 \"Alan Kay\" 1906 \"Grace Hopper\" 1953 \"Richard Stallman\" \n  # 1965 \"Yukihiro Matsumoto\" 1916 \"Claude Shannon\"\n\n  # Tempo: O(log(N))\n```\n```bash\n  # recupera um sub conjunto de um conjunto ordenado dado posição inicial e final\n  # A ordem dos elementos se dá do menor para o maior score\n  # \u003e ZRANGE hackers start stop [WITHSCORES]  \n  \u003e ZRANGE hackers 2 5\n  # \"Claude Shannon\" \"Alan Kay\" \"Richard Stallman\" \"Yukihiro Matsumoto\"\n\n  \u003e ZRANGE hackers 2 5 WITHSCORES\n  # 1940 \"Alan Kay\" 1953 \"Richard Stallman\" 1965 \"Yukihiro Matsumoto\" 1916 \"Claude Shannon\"\n\n  # Tempo: O(log(N)+M)\n```\n```bash\n  # recupera o index de um membro em um conjunto ordenado\n  \u003e ZRANK hackers \"Alan Kay\"\n  # 2\n\n  # Tempo: O(log(N))\n```\n```bash\n  # Remove um ou mais  itens  de um conjunto ordenado\n  \u003e ZREM hackers \"Alan Kay\"\n  # 1906 \"Grace Hopper\" 1953 \"Richard Stallman\" 1965 \"Yukihiro Matsumoto\" \n  # 1916 \"Claude Shannon\"\n  \n  # Tempo: O(M*log(N)) \n  # onde N é número de elementos presente no conjunto\n  # onde M é o número de  elementos a serem removidos\n```\n\n```bash\n  # Remove todos os membros de um conjunto ordenado dentro dos indexes especificados\n  \u003e ZREMRANGEBYRANK hackers 1 3\n  # \"Grace Hopper\" \"Richard Stallman\" \"Yukihiro Matsumoto\"\n\n  # Tempo: O(log(N)+M)\n  # onde N é número de elementos presente no conjunto\n  # onde M é o número de  elementos removidos na operação\n```\n\n```bash\n  # Remove todos os membros de um conjunto ordenado, com scores compreendidos \n  # entre mínimo e máximo (inclusivo)\n  \u003e ZREMRANGEBYSCORE hackers min max\n  \n  # Tempo: O(log(N)+M)\n  # onde N é número de elementos presente no conjunto\n  # onde M é o número de  elementos removidos na operação\n```\n\n```bash\n  # recupera o score associado á um membro do conjunto ordenado\n  \u003e ZSCORE hackers \"Grace Hopper\" \n  # 1906\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # retorna um subconjunto do conjunto ordenado baseado no score\n  # ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]\n  \u003e ZRANGEBYSCORE hackers 0 2000\n  # \"Grace Hopper\" \"Claude Shannon\" \"Alan Kay\" \"Richard Stallman\" \"Yukihiro Matsumoto\"\n  \n  # Tempo: O(log(N)+M)\n  # onde N é número de elementos presente no conjunto\n  # onde M é o número de  elementos removidos na operação\n```\n--------------------------\n\n\n## Manipulando Hashes\n\nMapas / Dicionários\n\n\n```bash\n  # Seta o valor de uma chave em um hash\n  \u003e HSET perfil_do_eduardo nome 'José Eduardo Almeida'\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # Recupera o valor do campo de uma chave especificada de um hash\n  \u003e HGET perfil_do_eduardo nome\n  # 'José Eduardo Almeida'\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # Recupera todos campos e chaves  de um hash\n  \u003e HGETALL perfil_do_eduardo\n  # \"nome\" \"José Eduardo\"\n\n  # Tempo: O(N)\n```\n\n\n\n```bash\n  # set o valor de um capo do hash, somente se o campo não existir\n  \u003e HSETNX perfil_do_eduardo nome 'James'\n  # HGETALL perfil_do_eduardo\n  # \"nome\" \"José Eduardo\"\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # set o valor de multiplos campos de um hash\n  \u003e HMSET perfil_do_eduardo idade '36' filha 'Daylla'\n  \n  # Tempo: O(N)\n```\n\n\n```bash\n  # incrementa o valor de um campo de um hash dado um numero como parametro\n  \u003e HINCRBY perfil_do_eduardo idade 1\n  # 37 \n\n  # Tempo: O(1)\n```\n\n\n```bash\n  # Remove um ou mais itens de um hash\n  \u003e HDEL chave campo1 campo2\n  \n  # Tempo: O(N)\n```\n\n\n```bash\n  # checa a existencia de um campo em um hash\n  \u003e HEXISTS perfil_do_eduardo nome\n  # 1\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # recupera uma  lista com o nome de todos os campos de um hash\n  \u003e HKEYS perfil_do_eduardo\n  # nome idade filha\n  \n  # Tempo: O(N)\n```\n\n\n```bash\n  # recupera o numero de campos dentro do hash\n    \u003e HLEN perfil_do_eduardo\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # recupera o tamanho da string armazenada como valor do campo de um hash\n  \u003e HSTRLEN perfil_do_eduardo nome\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # recupera uma lista com os valores associado a todos os campos de um hash \n  \u003e HVALS perfil_do_eduardo\n  \n  # Tempo: O(N)\n```\n\n\n--------------------------\n\n## Manipulando HyperLogLog\n\n```bash\n  # Adiciona os itens especificados á um hyperloglog\n  \u003e PFADD chave elemento1 elemento2\n  \n  # Tempo: O(1) para cada elemento\n```\n\n```bash\n  # recupera a cardinalidade aproximada de um conjunto \n  # observado pelo hyperloglog na chave especifica\n  \u003e PFCOUNT chave1 chave2\n  \n  # Tempo: O(1) para uma chave e O(n) para multiplas chaves\n```\n\n```bash\n  # Combina multiples valores de hyperlolog em um valor unique que será aproximado \n  # á cardinalidade da união dos conjuntos observados\n  \u003e PFMERGE conjunto_destino conjunto_base1 conjunto_base2\n  \n  # Tempo: O(N)\n```\n\n\n\n--------------------------\n\n## Manipulando Publicação / Assinatura\n\n```bash\n  # Escuta por todas as mensagens enviadas em canais que correspondam aos padrões fornecidos\n  \u003e PSUBSCRIBE padrao1 padrao2\n  \n  # Tempo: O(N)\n```\n\n```bash\n  # comando de introspecção que permite inspecionar o estado do subsistema Pub / Sub. \n  #  É composto de subcomandos documentados separadamente\n  \u003e PUBSUB subcomando argumento1 argumento2\n  \n  # Tempo: O(N)\n```\n\n```bash\n  # Envia uma mensagem para o canal especificado \n  \u003e PUBLISH canal mensagem\n  \n  # Tempo: O(N+M)\n  # onde N é o número de clientes assinantes e M é o total de padroes assinantes\n```\n\n```bash\n  # Para de Escutar as mensagens enviadas em canais que correspondam aos padrões fornecidos\n  \u003e PUNSUBSCRIBE padrao1 padrao2\n  \n  # Tempo: O(N+M)\n  # onde N é o número de clientes assinantes e M é o total de padroes assinantes\n```\n\n```bash\n  # Escutar por mensagens em um canal especificado\n  \u003e SUBSCRIBE canal1 canal2\n  \n  # Tempo: O(N)\n```\n\n```bash\n  # Escutar por mensagens em um canal especificado\n  \u003e UNSUBSCRIBE canal1 canal2\n  \n  # Tempo: O(N)\n```\n\n\n--------------------------\n\n\n## Manipulando Streams\n\n```bash\n  # * auto generated id\n  \u003e XADD meustream * sensor-id 1234 temperatura 19.8\n  # returns stream ID 1518951480106-0\n```\n\n\n```bash\n  \u003e XLEN meustream \n  # (integer) 1\n```\n\n--------------------------\n\n\n## Outros comandos\n\n```bash\n  # RECUPERA todas as chaves dado o padrão glob fornecido.\n  KEYS glob\n\n  keys \u003cpadrão # use com cuidado em produção\n \tkeys prefixo*\n \tkeys *padrão*\n \tkeys *sufixo\n \tkeys [a-c]* # expressoes tipo grep\n  \n  # Exemplos:\n  # h?llo retornará hello hallo hhllo\n  # h*llo retornará hllo heeeello\n  # h[ae]llo retornará hello e hallo, mas não hillo\n\n  # Tempo: O(n)\n```\n\n```bash\n  # deleta todas as chaves dadas\n  \u003e DEL chave1 chave2\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # Configura uma chave pra expirar em X segundos, onde X é  um número\n  \u003e EXPIRE chave segundos\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # Recupera o tempo de vida de uma  chave\n  \u003e TTL chave\n  \n  # Tempo: O(1)\n```\n\n```bash\n  # Checa a existência de uma chave dada\n  \u003e EXISTS chave\n  \n  # Tempo: O(1)\n```\n\n\n```bash\n  # Assiste os comandos ao vivo. Seja cuidadoso ao usar em produção.\n  \u003e MONITOR\n  \n```\n\n```bash\n  # recupera informações sobre o Redis\n  \u003e INFO\n  \n```\n\n\n```bash\n  # Faz o dum de um banco em background\n  \u003e BGSAVE\n   \n```\n\n\n```bash\n  # Lista clientes conectados\n  \u003e CLIENT LIST\n  \n  # Tempo: O(N)\n```\n\n\n```bash\n  # Termina a conexao de um cliente\n  \u003e CLIENT KILL \u003cIP\u003e:\u003cporta\u003e\n  \n  # Tempo: O(N)\n```\n\n\n\n```bash\n  # Recupera os ultimos 25 ultimos comandos mais  lentos\n  \u003e SLOWLOG RESET \n  # espera por um tempo\n  SLOWLOG GET 25\n  \n```\n\n\n\n\u003c!-- Global site tag (gtag.js) - Google Analytics --\u003e\n\u003cscript async src=\"https://www.googletagmanager.com/gtag/js?id=G-1S3V0C209Z\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  window.dataLayer = window.dataLayer || [];\n  function gtag(){dataLayer.push(arguments);}\n  gtag('js', new Date());\n\n  gtag('config', 'G-1S3V0C209Z');\n\u003c/script\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweb2solutions%2Fredis-em-5-minutos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweb2solutions%2Fredis-em-5-minutos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweb2solutions%2Fredis-em-5-minutos/lists"}