Redis persistente: filas, sessões e Horizon que não se perdem
Desde 2024 que tem o Redis incluído em todos os planos, e continua igual. Mas esse Redis é uma cache e comporta-se como tal: começa vazio sempre que é reiniciado e, quando fica cheio, descarta as chaves menos usadas. Para a cache de objetos do WordPress é exatamente o que é preciso, porque tudo o que guarda pode voltar a ser calculado.
Uma fila de trabalhos ou a sessão de um utilizador não podem voltar a ser calculadas. Se a cache se esvaziar, um trabalho pendente desaparece sem que ninguém dê por isso e quem estava dentro da sua aplicação tem de voltar a entrar. Por isso, até agora recomendávamos deixar filas e sessões na base de dados, e o Horizon, que só trabalha com Redis, ficava de fora.
Agora, nos planos Avanza, Max e Elastic, pode ativar um Redis persistente.
O que o torna diferente
É uma instância própria da sua conta. É Valkey 8, compatível com Redis: os mesmos comandos e os mesmos clientes, como o PhpRedis. E comporta-se como as filas e as sessões precisam:
- Guarda os dados em disco a cada segundo. Ao ser reiniciado, conserva-os e, perante um corte, perde-se no máximo o último segundo.
- Quando fica cheio, não apaga nada: rejeita as escritas novas com um erro. Numa fila é isso que se quer, que a aplicação avise e não que um trabalho desapareça em silêncio.
- Entra nas cópias de segurança diárias, tal como o resto dos seus ficheiros.
- A memória é você que a escolhe: 64 MB por omissão, até 128 MB no Avanza, 256 MB no Max e 512 MB no Elastic. Filas e sessões ocupam pouco: 64 MB chegam para a maioria das aplicações.
Se um uso concreto o exigir, pode alterar os dois comportamentos: retirar-lhe a persistência ou deixar que descarte o menos usado quando fica cheio.
Ativá-lo e ligá-lo
Ativa-se em Alojamento → o seu serviço → Gestor de pacotes, no cartão Redis persistente. Aí mesmo vê a memória que usa e o que ocupa em disco, e pode alterar as suas definições, reiniciá-lo, esvaziá-lo ou desativá-lo.
Liga-se por socket e sem palavra-passe, porque só o utilizador da sua conta o pode abrir. No Laravel são umas poucas linhas do .env, com o seu utilizador do cPanel em vez de USUARIO:
REDIS_CLIENT=phpredis
REDIS_HOST=/home/USUARIO/.hostsuar/redis/redis.sock
REDIS_PORT=0
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
Pode usar os dois Redis ao mesmo tempo: a cache no Redis de sempre e as filas e as sessões no persistente. No guia, tem como separá-los em config/database.php.
Horizon, finalmente
O Horizon precisa de duas coisas: filas no Redis e um processo que o mantenha em execução. A primeira é o Redis persistente; a segunda, os processos persistentes, que chegam ao mesmo tempo. Com os dois, o Horizon funciona no seu alojamento com o seu painel e as suas métricas.
Tenha em conta que o Redis persistente corre como mais um processo da sua conta, dentro dos seus recursos, e ocupa uma das vagas de processos persistentes do plano: no Avanza, o Redis e o Horizon usam duas das três.
Tem o passo a passo, com a ligação a partir do Laravel, a utilização em conjunto com o Redis de cache e a instalação do Horizon, no guia de Redis persistente.