DEV Community

Marllon Gomes
Marllon Gomes

Posted on

Entenda as vantagens de usar o Redis: Exemplo prático em Laravel

Performance é um fator crítico em qualquer aplicação, especialmente em aplicações de alto tráfego. Bancos de dados comuns, como PostgreSQL, MySQL e Oracle, são amplamente utilizados e são projetados para gerenciar dados estruturados e relacionamentos entre tabelas.

No entanto, esses bancos têm alguns limites de utilização tanto para leitura quanto para escrita, pois são gravados em disco nos servidores. Apesar das grandes melhorias trazidas pelos SSDs, ainda há gargalos quando se trata de milhões de requisições.

Com o crescimento de toda aplicação, chega um momento em que apenas o banco de dados relacional com gravação em disco já não será suficiente para suportar toda a carga de acessos, o que leva à busca por soluções para este problema.

Uma solução amplamente utilizada por grandes empresas é o Redis, que é um banco de dados NoSQL muito rápido devido à sua arquitetura, pois armazena os dados na memória RAM do servidor, permitindo que ele seja muito mais rápido do que os armazenamentos em disco.

A velocidade de acesso à memória RAM é significativamente maior do que a velocidade de acesso ao disco. Isso se deve ao fato de que todos os bytes gravados na memória RAM podem ser acessados diretamente pelo processador em nanosegundos, enquanto os dados armazenados em disco precisam ser lidos através do trajeto: disco → memória RAM → processador, o que leva alguns milissegundos para ser processado.

Veja abaixo um exemplo usando PHP e Laravel em que a leitura de todos os posts de uma determinada tabela passa de aproximadamente 300ms para apenas 10ms, simplesmente com a implementação do Redis. Essa diferença de 290ms pode parecer insignificante em aplicações pequenas, mas em 1 milhão de requisições representa uma diferença significativa de 80 horas para completar a mesma tarefa.

Exemplo de código sem ache, com resposta média de 300ms

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Controller;
use App\Models\Post;

class PostsController extends Controller {
    public function index() {
        return response()->json(Post::all());
    }
}
Enter fullscreen mode Exit fullscreen mode

Exemplo de código com cache utilizando Redis, com resposta média de 10ms

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Controller;
use App\Models\Post;

class PostsController extends Controller {
    public function index() {
        $cacheKey = 'posts';
        $cacheDuration = 60; //in seconds
        $posts = Cache::remember($cacheKey, $cacheDuration, function() {
            return Post::all();
        });
        return response()->json($posts);
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)