Conceitos e Instalação do REDIS
O Redis é um banco de dados NoSQL em memória que se tornou muito popular em aplicações web devido à sua alta performance, escalabilidade e flexibilidade. Ele é Open Source e amplamente utilizado para armazenamento em cache de dados frequentemente acessados, gerenciamento de fila de mensagens e outras finalidades que exigem alta velocidade de leitura e gravação. Com seus recursos avançados, como persistência em disco, replicação de dados, o Redis é uma ferramenta poderosa para melhorar o desempenho e a escalabilidade das aplicações web.
Conceito
Redis, acrônimo para Remote Dictionary Server (servidor de dicionário remoto), é um banco de dados em memória, o que significa que os dados são armazenados na memória RAM em vez de serem gravados em disco. Isso permite que o Redis tenha um desempenho muito alto, pois a leitura e gravação de dados são muito mais rápidas na RAM do que no disco.
O Redis é um banco de dados chave-valor, o que significa que os dados são armazenados como pares de chave-valor. Cada chave é um identificador exclusivo para um valor e os valores podem ser strings, hashes, listas, conjuntos, entre outros. O Redis suporta uma variedade de operações para cada tipo de valor, como adicionar ou remover elementos de uma lista, ou recuperar um valor específico de um hash.
O Redis também oferece recursos avançados, como persistência em disco, replicação de dados e pub/sub (publicação/assinatura) . A persistência em disco permite que os dados sejam gravados em disco periodicamente ou quando um determinado número de alterações é atingido, garantindo que os dados não sejam perdidos em caso de falha de energia ou reinicialização do servidor. A replicação de dados permite que os dados sejam copiados de um servidor para outro, garantindo a disponibilidade e escalabilidade da aplicação. O pub/sub permite que os clientes se inscrevam em canais de mensagens e recebam notificações quando novas mensagens são publicadas nos canais.
Uso em Aplicações Web
O Redis é amplamente utilizado em aplicações web para armazenamento em cache de dados frequentemente acessados, como resultados de consultas de banco de dados, resultados de cálculos ou informações de sessão do usuário. Ele também é usado para gerenciamento de fila de mensagens, armazenamento de dados temporários e outras finalidades que exigem alta velocidade de leitura e gravação.
O Redis pode melhorar significativamente o desempenho e a escalabilidade das aplicações web, reduzindo a carga no banco de dados principal e reduzindo o tempo de resposta para os usuários. Além disso, o Redis é facilmente integrado com outras tecnologias, como bancos de dados SQL ou NoSQL, servidores web e servidores de aplicação.
Exemplos de uso e principais características
O Redis é uma ferramenta muito versátil e pode ser utilizado em uma variedade de casos de uso em diferentes tipos de aplicações. Aqui estão alguns exemplos de como o Redis pode ser usado:
Armazenamento em cache
O Redis é frequentemente utilizado para armazenamento em cache de dados frequentemente acessados, como resultados de consultas de banco de dados, resultados de cálculos ou informações de sessão do usuário. O armazenamento em cache reduz a necessidade de acessar o banco de dados principal repetidamente, melhorando a velocidade e escalabilidade da aplicação.
Gerenciamento de sessões
O Redis é um bom candidato para armazenar dados de sessão de usuários em aplicações web. As informações de sessão são frequentemente acessadas e podem ser armazenadas em cache em um servidor Redis. Isso melhora o desempenho e reduz a carga no banco de dados principal.
Fila de mensagens
O Redis também é frequentemente utilizado como uma fila de mensagens para processamento assíncrono de tarefas. As tarefas são adicionadas à fila, e um ou mais processos de trabalhadores podem processá-las em paralelo. Isso é útil para tarefas que exigem muito tempo de processamento ou para tarefas que não precisam ser processadas imediatamente.
Contagem de eventos
O Redis é muito rápido para contagens incrementais, e é útil para casos de uso em que as contagens precisam ser atualizadas rapidamente. Isso pode ser utilizado para contagem de visitas em páginas da web, número de downloads de arquivos, entre outros.
Filtragem de dados
O Redis também pode ser usado para filtragem de dados, como listas de bloqueios, listas de usuários ativos, entre outros. Isso é útil para casos de uso em que as informações precisam ser atualizadas rapidamente, sem a necessidade de acessar o banco de dados principal.
Geolocalização
O Redis pode ser usado para indexação geoespacial, armazenando as coordenadas geográficas como um par chave-valor. O Redis pode então ser utilizado para buscar dados com base em sua localização, como buscar estabelecimentos próximos a uma determinada coordenada.
Alta disponibilidade
O Redis pode trabalhar em cluster, com nó master e seus workers, e é compatível com a replicação assíncrona em que os dados podem ser replicados para vários servidores subordinados.
Atomicidade e Threads
Suas operações são atômicas, ou seja, uma operação sempre retornará sucesso ou falha obrigatoriamente e seu modo de execução é single-thread, tornando-o mais eficiente e estável do que os sistemas multi-thread, pois não há necessidade de alternar entre threads.
Esses são apenas alguns exemplos de como o Redis pode ser utilizado. Em resumo, o Redis é uma ferramenta poderosa para armazenamento em memória de dados em aplicações web, que pode melhorar significativamente o desempenho e a escalabilidade das aplicações.
Veremos a seguir como criar um servidor REDIS no Ubuntu 22.04
Acesso SSH e logado como usuário root
Um servidor Ubuntu 22.04 instalado com IP estático (ex: 172.16.15.3) e devidamente atualizado.
apt update && apt upgrade apt autoremove apt autoclean apt clean
Se você estiver executando uma distribuição mínima (como um contêiner do Docker), talvez seja necessário instalar o “lsb-release”
sudo apt install lsb-release
Instalação da versão mais recente
Se você gostaria de ter uma versão mais recente do Redis Server, você pode optar por usar o repositório PPA mantido pelo Redis Development.
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
Atualize o repositórios
sudo apt update
Instalação do Redis Server
sudo apt install redis -y
Confira a versão instalada
redis-server -v
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9
Configuração básica do servidor Redis
Nesta etapa, vamos configurar um servidor Redis básico. No Ubuntu, a configuração do Redis está localizada no arquivo /etc/redis/redis.conf.
Edite o arquivo de configuração “redis.conf” usando o editor o seu editor preferido (vim, nano, etc.).
vim /etc/redis/redis.conf
Configuração do sistema de inicialização
Dentro do arquivo de configuração, localize a diretiva supervised e altere para supervised systemd . Como estamos utilizando o Ubuntu, que usa o systemd como sistema de inicialização de serviços, se fornece mais controle sobre sua operação.
# If you run Redis from upstart or systemd, Redis can interact with your # supervision tree. Options: # supervised no - no supervision interaction # supervised upstart - signal upstart by putting Redis into SIGSTOP mode # requires "expect stop" in your upstart job config # supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET # on startup, and updating Redis status on a regular # basis. # supervised auto - detect upstart or systemd method based on # UPSTART_JOB or NOTIFY_SOCKET environment variables # Note: these supervision methods only signal "process is ready." # They do not enable continuous pings back to your supervisor. # # The default is "no". To run under upstart/systemd, you can simply uncomment # the line below: # supervised systemd
Vinculação ao localhost
Por padrão, o servidor Redis não aceita conexões remotas. Você pode se conectar ao Redis somente a partir de 127.0.0.1 (localhost), ou seja, a máquina onde o Redis está sendo executado. Ainda no arquivo de configuração do REDIS, deixe a diretiva como o mostrado a seguir: bind 127.0.0.1 ::1
# Examples: # # bind 192.168.1.100 10.0.0.1 # listens on two specific IPv4 addresses # bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6 # bind * -::* # like the default, all available interfaces # # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # internet, binding to all the interfaces is dangerous and will expose the # instance to everybody on the internet. So by default we uncomment the # following bind directive, that will force Redis to listen only on the # IPv4 and IPv6 (if available) loopback interface addresses (this means Redis # will only be able to accept client connections from the same host that it is # running on). # # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # COMMENT OUT THE FOLLOWING LINE. # # You will also need to set a password unless you explicitly disable protected # mode. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1 ::1
Configurar senha (opcional)
A configuração de uma senha Redis habilita um de seus recursos de segurança internos. O comando auth, vai exigir que os clientes se autentiquem para acessar o banco de dados. Novamente edite o arquivo de configuração /etc/redis/redis.conf, localize a diretiva requirepass e defina a sua senha desejada.
# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility # layer on top of the new ACL system. The option effect will be just setting # the password for the default user. Clients will still authenticate using # AUTH <password> as usually, or more explicitly with AUTH default <password> # if they follow the new protocol: both will work. # # The requirepass is not compatible with aclfile option and the ACL LOAD # command, these will cause requirepass to be ignored. # requirepass suaSenha
Após concluídos os ajustes, salve e saia do arquivo de configuração
Reinicie o servidor REDIS para aplicar as alterações:
sudo systemctl restart redis-server
Instalar a extensão PHP (opcional)
Se você precisa usar REDIS com um aplicativo PHP, você precisa instalar a extensão Redis PHP em seu sistema Ubuntu. Para instalar a extensão, digite:
apt install php-redis
CONFIGURAÇÕES DE FIREWALL
Supondo que você esteja usando o UFW para gerenciar seu firewall, será necessário abrir a porta padrão do REDIS (6379).
ufw allow 6379 enable
Verifique se o redis está escutando em todas as interfaces na porta 6379. Execute o seguinte comando:
ss -an | grep 6379
A saída deve ser semelhante com o mostrado abaixo:
tcp LISTEN 0 511 127.0.0.1:6379 0.0.0.0:* tcp LISTEN 0 511 [::1]:6379 [::]:*
Conectar-se ao servidor REDIS
O Redis fornece o utilitário redis-cli para se conectar ao servidor Redis. Execute o seguinte comando:
redis-cli
127.0.0.1:6379> auth suaSenha OK 127.0.0.1:6379> ping PONG
Mais alguns exemplos da ferramenta de linha de comando redis-cli.
redis-cli info redis-cli info stats redis-cli info server
Gerenciando o serviço Redis
Agora que você tem seu serviço em funcionamento, vamos analisar os comandos básicos de gerenciamento.
Para interromper o serviço, execute este comando:
sudo systemctl stop redis-server
Para iniciar o serviço, execute este comando:
sudo systemctl start redis-server
Para desativar o serviço, execute este comando:
sudo systemctl disable redis-server
Para habilitar o serviço, execute este comando:
sudo systemctl enable redis-server
Para status do serviço, execute este comando:
sudo systemctl status redis-server
Futuro do REDIS
O futuro do Redis parece bastante promissor. Como uma das ferramentas de banco de dados em memória mais populares, o Redis tem uma comunidade grande e ativa de usuários e desenvolvedores. Além disso, o Redis Labs, a empresa por trás do Redis, está continuamente investindo na melhoria da ferramenta e na adição de novos recursos.
Algumas tendências e desenvolvimentos recentes que podem impactar o futuro do Redis incluem:
- Expansão dos casos de uso: O Redis originalmente se destacava como um cache em memória para melhorar o desempenho de aplicativos web, mas agora está sendo usado em uma ampla variedade de casos de uso, incluindo análise de dados em tempo real, processamento de transações financeiras e gerenciamento de sessões de usuários.
- Crescimento do armazenamento de dados em memória: O armazenamento de dados em memória é uma tendência crescente em bancos de dados. Como a memória é muito mais rápida do que os discos rígidos, os bancos de dados em memória como o Redis podem ser significativamente mais rápidos e eficientes do que os bancos de dados tradicionais em disco.
- Como parte da tendência mais ampla de adoção de arquiteturas de microsserviços e contêineres, o Redis é frequentemente usado em contêineres para fornecer recursos de armazenamento de dados compartilhados para aplicativos em execução em diferentes contêineres.
- Adoção crescente de tecnologias de nuvem: Com o crescimento da computação em nuvem, o Redis é frequentemente usado em ambientes de nuvem para fornecer armazenamento de dados escalável e de alta disponibilidade para aplicativos em execução em diferentes locais geográficos.
- Dadas essas tendências e desenvolvimentos, é provável que o Redis continue a ser uma ferramenta popular e útil para armazenamento de dados em memória e processamento de dados em tempo real.