{"id":25365749,"url":"https://github.com/diglopes/distributed-cache","last_synced_at":"2025-04-09T05:27:26.246Z","repository":{"id":275818914,"uuid":"917357452","full_name":"diglopes/distributed-cache","owner":"diglopes","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-04T18:07:32.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-14T23:49:37.983Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diglopes.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":"2025-01-15T20:39:18.000Z","updated_at":"2025-02-04T18:07:36.000Z","dependencies_parsed_at":"2025-02-05T04:30:24.826Z","dependency_job_id":null,"html_url":"https://github.com/diglopes/distributed-cache","commit_stats":null,"previous_names":["diglopes/distributed-cache"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diglopes%2Fdistributed-cache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diglopes%2Fdistributed-cache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diglopes%2Fdistributed-cache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diglopes%2Fdistributed-cache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diglopes","download_url":"https://codeload.github.com/diglopes/distributed-cache/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247984170,"owners_count":21028436,"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":"2025-02-14T23:49:45.543Z","updated_at":"2025-04-09T05:27:26.222Z","avatar_url":"https://github.com/diglopes.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Conceito de Cache\nCache é uma camada de armazenamento de dados temporários, usada para melhorar o desempenho de sistemas computacionais. Ele atua armazenando os dados frequentemente acessados ou mais recentemente utilizados em um local de acesso rápido (como memória RAM ou disco local), reduzindo o tempo necessário para recuperar informações de um recurso mais lento, como um banco de dados ou uma API externa. O cache é amplamente utilizado em aplicações web, bancos de dados, sistemas distribuídos, entre outros, e pode ser implementado em várias camadas:\n\n- **Cache no cliente:** Dados armazenados localmente no navegador, como cookies ou local storage.\n- **Cache no servidor:** Implementado em servidores para armazenar respostas frequentes ou resultados de cálculos.\n- **Cache distribuído:** Usado em sistemas com múltiplos servidores ou instâncias, onde os dados do cache são compartilhados entre todos os nós.\n\n# Rodando\n\nInicialize os nós do Redis e a aplicação de exemplo com o docker compose:\n\n```bash\ndocker compose up\n```\n\nCom o comando abaixo crie um cluster contendo **3 nós mestres** e **3 nós réplicas** (6 nós totais), valor mínimo necessário para que o mecanismo de reatribuição de nó mestre precisa para funcionar adequadamente e designar um novo nó mestre caso por algum motivo um dos 3 pare de responder.\n\n```bash\ndocker exec -it redis-node1 redis-cli --cluster create \\\n  redis-node1:6379 redis-node2:6379 redis-node3:6379 \\\n  redis-node4:6379 redis-node5:6379 redis-node6:6379 \\\n  --cluster-replicas 1\n```\n\nDesta forma, os 16383 **hash slots** ficariam distribuídos da seguinte maneira:\n\n```yaml\nMestre 1 → Slots 0 - 5460\nMestre 2 → Slots 5461 - 10922\nMestre 3 → Slots 10923 - 16383\n```\n\nPara verificar qual **hash slot** será utilizado para salvar o dado, consequentemente, \nà qual mestre será distribuído basta utilizar o comando abaixo:\n```bash\ndocker exec -it redis-node1 redis-cli cluster keyslot key:data\n```\n\nOu se quiser ver em tempo real as solicitações que estão sendo direcionadas para um determinado nó (ex: redis-node1) basta rodar este comando:\n```bash\ndocker exec -it redis-node1 redis-cli monitor\n```\n\n## Criando chaves pelas consultas\n\nFaça solicitações para a API criada e veja os resultados sendo retornados por meio de cache ou \"consulta direta\".\n\n```yml\nGET http://localhost:3000/data\n```\n\nCaso queira mudar a chave em que os dados são salvos, basta enviar o `query param`\n`cacheKey` com o valor desejado, como no exemplo abaixo:\n\n```yml\nGET http://localhost:3000/data?cacheKey=key:data90\n```\n\nNeste caso, ao invés de utilizar a chave padrão `key:data` será utilizado a chave `key:data90` provida.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiglopes%2Fdistributed-cache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiglopes%2Fdistributed-cache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiglopes%2Fdistributed-cache/lists"}