<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Williane Felix</title>
    <description>The latest articles on DEV Community by Williane Felix (@williane_felix).</description>
    <link>https://dev.to/williane_felix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2519909%2Fecf62a3f-a395-45c8-a3a0-a4a66ea8ce99.jpg</url>
      <title>DEV Community: Williane Felix</title>
      <link>https://dev.to/williane_felix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/williane_felix"/>
    <language>en</language>
    <item>
      <title>MySQL vs MongoDB vs Redis: Um Estudo de Performance e Carga em Aplicações Web</title>
      <dc:creator>Williane Felix</dc:creator>
      <pubDate>Sat, 14 Feb 2026 00:40:46 +0000</pubDate>
      <link>https://dev.to/williane_felix/mysql-vs-mongodb-vs-redis-um-estudo-de-performance-e-carga-em-aplicacoes-web-14k9</link>
      <guid>https://dev.to/williane_felix/mysql-vs-mongodb-vs-redis-um-estudo-de-performance-e-carga-em-aplicacoes-web-14k9</guid>
      <description>&lt;h2&gt;
  
  
  O Dilema da Persistência e Latência
&lt;/h2&gt;

&lt;p&gt;No desenvolvimento moderno, a escolha do banco de dados não é mais uma decisão binária entre SQL e NoSQL. O desafio real de engenharia é equilibrar &lt;strong&gt;consistência&lt;/strong&gt;, &lt;strong&gt;escalabilidade&lt;/strong&gt; e &lt;strong&gt;latência&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Este estudo nasceu do projeto &lt;code&gt;willyfelix/todolist-db-comparison&lt;/code&gt;, onde submeti uma aplicação de &lt;em&gt;Todo List&lt;/em&gt; a testes de estresse. O objetivo? Analisar como o &lt;strong&gt;MySQL&lt;/strong&gt; (integridade referencial), o &lt;strong&gt;MongoDB&lt;/strong&gt; (flexibilidade documental) e o &lt;strong&gt;Redis&lt;/strong&gt; (velocidade em memória) se comportam sob carga extrema.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Aplicação: Todo List
&lt;/h2&gt;

&lt;p&gt;A aplicação consiste em uma API REST desenvolvida em &lt;strong&gt;Python/Flask&lt;/strong&gt;. Foram criadas duas versões idênticas: uma sobre MySQL e outra sobre MongoDB, garantindo que as métricas reflitam o banco de dados e não a lógica de negócio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Por que uma Todo List?
&lt;/h3&gt;

&lt;p&gt;É um domínio universal que permite medir o impacto real do CRUD sem complexidade adicional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Relacional (MySQL):&lt;/strong&gt; Testa conexões entre usuários e tarefas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NoSQL (MongoDB):&lt;/strong&gt; Testa a performance de objetos aninhados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache (Redis):&lt;/strong&gt; Avalia o ganho em cenários de leitura intensiva.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Arquitetura e Implementação
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MySQL - Abordagem Relacional
&lt;/h3&gt;

&lt;p&gt;Uso de &lt;em&gt;schema&lt;/em&gt; fixo e tipado com índices estratégicos para otimização de busca.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;todos&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;titulo&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;concluida&lt;/span&gt; &lt;span class="nb"&gt;BOOLEAN&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data_criacao&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;INDEX&lt;/span&gt; &lt;span class="n"&gt;idx_concluida&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;concluida&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  MongoDB - Abordagem NoSQL
&lt;/h3&gt;

&lt;p&gt;Documentos BSON flexíveis que favorecem a escrita rápida e escalabilidade horizontal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ObjectId(&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"titulo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Título da tarefa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"concluida"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data_criacao"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ISODate(&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Redis - O Poder da Memória
&lt;/h3&gt;

&lt;p&gt;Implementamos três estratégias clássicas de cache para observar os &lt;em&gt;trade-offs&lt;/em&gt; de cada uma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache-Aside (Lazy Loading):&lt;/strong&gt; O dado é carregado no cache apenas sob demanda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write-Through:&lt;/strong&gt; Escrita simultânea no banco e no cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write-Behind:&lt;/strong&gt; Foco total em performance; escreve no cache primeiro e no banco de forma assíncrona.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Resultados e Benchmarks
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Testes realizados em ambiente local.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Inserção de Dados (Bulk Insert)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Volume&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;MySQL + Redis&lt;/th&gt;
&lt;th&gt;MongoDB + Redis&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;10k&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;34.247&lt;/td&gt;
&lt;td&gt;51.370&lt;/td&gt;
&lt;td&gt;125.800&lt;/td&gt;
&lt;td&gt;128.400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;100k&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;41.025&lt;/td&gt;
&lt;td&gt;61.537&lt;/td&gt;
&lt;td&gt;155.900&lt;/td&gt;
&lt;td&gt;158.700&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Análise:&lt;/strong&gt; O MongoDB superou o MySQL em 58% na escrita nativa devido ao modelo de documentos desnormalizados. Com Redis, o throughput saltou para 150k reg/s, provando que a RAM elimina o gargalo de I/O de disco.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Operações de Leitura (GET)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;Redis (Híbrido)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo Médio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2550.1ms&lt;/td&gt;
&lt;td&gt;185.4ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.1ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.91 req/s&lt;/td&gt;
&lt;td&gt;5.39 req/s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;925.9 req/s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Análise:&lt;/strong&gt; O Redis reduziu a latência em mais de 2000 vezes comparado ao MySQL sob carga. O teste confirma que, para leituras repetitivas, a persistência em disco não consegue competir com a velocidade sub-milissegundo da memória.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Operações de Escrita (POST)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;Redis (Híbrido)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo Médio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2385.8ms&lt;/td&gt;
&lt;td&gt;412.3ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15.2ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.18 req/s&lt;/td&gt;
&lt;td&gt;24.2 req/s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;657.8 req/s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Análise:&lt;/strong&gt; O MongoDB foi 6x mais rápido que o MySQL em escritas puras, mas a arquitetura híbrida com Redis dominou com 657 req/s. Delegar a confirmação de escrita para o cache desafoga o banco principal e escala a aplicação.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Atualização (PUT)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;Redis (Híbrido)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo Médio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2476.2ms&lt;/td&gt;
&lt;td&gt;435.1ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16.4ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.04 req/s&lt;/td&gt;
&lt;td&gt;22.9 req/s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;607.9 req/s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Análise:&lt;/strong&gt; O combo MongoDB + Redis manteve a liderança com 16ms de resposta média. O desafio aqui reside na coerência: o cache garante velocidade, mas exige estratégias como &lt;em&gt;Write-Through&lt;/em&gt; para sincronizar o dado no banco persistente.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Deleção (DELETE)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;MongoDB&lt;/th&gt;
&lt;th&gt;Redis (Híbrido)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo Médio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2514.7ms&lt;/td&gt;
&lt;td&gt;398.1ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13.8ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3.97 req/s&lt;/td&gt;
&lt;td&gt;2.51 req/s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;72.4 req/s&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Análise:&lt;/strong&gt; O MySQL mostrou-se ligeiramente mais estável que o MongoDB puro em deleções massivas. No entanto, o Redis padronizou a performance para 13ms, garantindo que o usuário perceba a remoção de forma instantânea.&lt;/p&gt;




&lt;h2&gt;
  
  
  Análise Comparativa
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;MySQL: O Porto Seguro&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vantagem:&lt;/strong&gt; Consistência ACID e integridade referencial absoluta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gargalo:&lt;/strong&gt; O custo do disco e os &lt;em&gt;locks&lt;/em&gt; de linha tornam a latência alta sob estresse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;MongoDB: O Atleta de Performance&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vantagem:&lt;/strong&gt; Escrita até &lt;strong&gt;6x mais rápida&lt;/strong&gt; que o SQL e esquema flexível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gargalo:&lt;/strong&gt; Consumo de RAM elevado para manter índices e &lt;em&gt;working set&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Redis: O Motor de Fórmula 1&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vantagem:&lt;/strong&gt; Reduziu a latência em &lt;strong&gt;2000x&lt;/strong&gt;. Essencial para evitar que o banco principal sofra com picos de tráfego.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Principais Aprendizados
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latência é o Gargalo Silencioso:&lt;/strong&gt; O I/O de disco é o maior inimigo da escala. O Redis provou que a RAM é o divisor de águas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off de Rigidez:&lt;/strong&gt; O MySQL garante dados limpos, mas o MongoDB entrega agilidade. A escolha depende da prioridade do projeto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache exige Estratégia:&lt;/strong&gt; Não basta "instalar". Escolher entre &lt;em&gt;Cache-Aside&lt;/em&gt; ou &lt;em&gt;Write-Through&lt;/em&gt; define se seu usuário verá dados obsoletos ou não.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Recomendação Final
&lt;/h2&gt;

&lt;p&gt;Se você está construindo uma aplicação que pretende crescer, minha recomendação baseada nos dados é: não escolha apenas um. Este conceito de combinar diferentes tecnologias é o que a literatura técnica chama de &lt;strong&gt;Persistência Poliglota&lt;/strong&gt;. Segundo &lt;strong&gt;Martins et al. (2024)&lt;/strong&gt;, essa abordagem é fundamental para superar as limitações de modelos únicos em cenários de alta demanda.&lt;/p&gt;

&lt;p&gt;Para um sistema de tarefas ou similar:&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;MongoDB ou MySQL&lt;/strong&gt; como sua "Fonte da Verdade" (Single Source of Truth), onde os dados residem com segurança.&lt;/p&gt;

&lt;p&gt;Implemente &lt;strong&gt;Redis&lt;/strong&gt; obrigatoriamente para as rotas de GET, utilizando a estratégia de Cache-Aside com um TTL (Time to Live) curto (ex: 5 a 10 minutos). Isso reduzirá a carga no seu banco principal em até 90%, permitindo que você rode em servidores mais baratos e ofereça uma interface instantânea para o usuário final.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recursos e Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/willyfelix/todolist-db-comparison" rel="noopener noreferrer"&gt;Código fonte no GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redis.io/docs" rel="noopener noreferrer"&gt;Redis Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/resources/basics/databases/nosql-explained" rel="noopener noreferrer"&gt;NoSQL Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oracle.com/br/mysql/what-is-mysql/" rel="noopener noreferrer"&gt;MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Martins, L. S. S. et al. (2024).&lt;/strong&gt; &lt;em&gt;Persistência Poliglota: o armazenamento de dados e suas possibilidades.&lt;/em&gt; &lt;a href="https://doi.org/10.5753/reic.2024.4796" rel="noopener noreferrer"&gt;Link DOI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Martin Fowler.&lt;/strong&gt; &lt;em&gt;Patterns of Enterprise Application Architecture.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redis</category>
      <category>performance</category>
      <category>mysql</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Git diff em Ação: Analisando e Compreendendo Alterações no Seu Repositório</title>
      <dc:creator>Williane Felix</dc:creator>
      <pubDate>Thu, 25 Sep 2025 18:21:29 +0000</pubDate>
      <link>https://dev.to/williane_felix/git-diff-em-acao-analisando-e-compreendendo-alteracoes-no-seu-repositorio-n5m</link>
      <guid>https://dev.to/williane_felix/git-diff-em-acao-analisando-e-compreendendo-alteracoes-no-seu-repositorio-n5m</guid>
      <description>&lt;p&gt;O controle eficiente de versão é um pilar fundamental no desenvolvimento de software, e o Git se destaca como uma ferramenta indispensável nesse cenário. No coração do Git, encontramos o comando git diff, uma poderosa ferramenta que possibilita analisar, compreender e gerenciar alterações no código-fonte.&lt;/p&gt;

&lt;p&gt;Seja você um iniciante curioso, um desenvolvedor experiente ou um colaborador envolvido em revisões de código, entender como o git diff funciona é crucial para otimizar o fluxo de trabalho e manter um histórico de alterações preciso. Este breve guia abrange algumas dicas de como utilizar essa ferramenta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamentos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É importante destacar algo evidente, mas muitas vezes negligenciado: mantenha uma atenção constante nas alterações que você realiza.&lt;/p&gt;

&lt;p&gt;Isso se torna particularmente relevante quando modificamos um código para testes ou experimentos e, posteriormente, esquecemos de desfazer a alteração. Por isso, é altamente recomendável fazer uso do comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O comando git diff, sem argumentos, permite visualizar as alterações que ainda não foram selecionadas para o commit.&lt;/p&gt;

&lt;p&gt;Dessa forma, na linha de comando, o Git sinaliza essas mudanças como "Changes not staged for commit". Mudanças em arquivos não versionados (untracked files) ou alterações que não foram selecionadas para o commit não são consideradas pelo git diff. Entretanto, por experiência prática, revisar as alterações antes de incluí-las no commit pode ser extremamente útil.&lt;/p&gt;

&lt;p&gt;Além disso, após realizar um commit, você ainda pode aproveitar esse comando para revisar as diferenças que ainda não foram enviadas para o repositório remoto, evitando possíveis problemas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comandos básicos do git diff&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O git diff oferece parâmetros que permitem comparações entre versões, incluindo referências por commit, branches e tags.&lt;/p&gt;

&lt;p&gt;Aqui estão alguns exemplos:&lt;/p&gt;

&lt;p&gt;· Para exibir alterações no índice, basta por git diff e o caminho do arquivo:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Obs.: Antes do comando git diff você deve executar o comando &lt;code&gt;git status&lt;/code&gt; para identificar o path do arquivo que você quiser ver as alterações, caso você execute o git diff sem nenhum caminho, ele retornará todos arquivos modificados.&lt;/em&gt;&lt;br&gt;
﻿&lt;br&gt;
&lt;code&gt;$ git diff src/pages/App.svelte&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykmutwjhzgi8mqpw17k2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykmutwjhzgi8mqpw17k2.png" alt="Git diff na prática, monstrando o que foi modificado em um arquivo" width="791" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· Para analisar as diferenças entre seu código atual e uma branch local chamada master:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fao7au13xk38zx2t2hxb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fao7au13xk38zx2t2hxb1.png" alt="Usando git diff pra ver as diferenças entre seu código atual e uma branch local chamada master" width="781" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· Para verificar as diferenças entre seu código atual e uma branch remota chamada development:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff origin/development&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· Visualizando modificações na árvore de trabalho em relação a um commit específico:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff 568e80b62218db68043f388300896a9b6db77c5d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimywnp9h4n7qkmhpjqwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimywnp9h4n7qkmhpjqwb.png" alt="Usando o git diff pra visualizar as modificações na árvore de trabalho em relação a um commit específico" width="783" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;· Para revisar as diferenças entre dois commits específicos:&lt;/p&gt;

&lt;p&gt;Obs: para saber o identificador do commit execute o comando “git log”.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff f8b95c57d46052e612b0d9c504d97fe052eec185 674068c36accd9c1f5a6350bc9eb9c83f7058474&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dica: Você também pode usar uma parte do SHA1, que é o identificador do commit, desde que não seja uma referência ambígua:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff f8b95c5 674068c&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· Para verificar as diferenças entre seu código atual e um commit nomeado com uma tag chamada 1.0:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git diff 1.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essas diversas formas, dentre outras, de utilizar o git diff fornecem flexibilidade para analisar e comparar alterações em diferentes contextos, desde a preparação de commits até análises mais avançadas de históricos de código.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
