Imagine ter que enviar um email de campanha para milhares de usuários da sua plataforma. Para isso, você cria uma funcionalidade de escrever o email em sua própria plataforma, selecionar para quem deve ser enviado (todos os usuários) e clicar em "Enviar".
Quanto tempo você teria que esperar?
Imagine criar uma funcionalidade que permite que usuários definam lembretes para serem enviados em certos dias/horários.
Como você implementaria isso?
Pense no Redis como um "Banco de Dados" onde, ao invés de tabelas, as estruturas dos dados são Hashes (aka key-value store)
# On macOS
brew update
brew install redis
brew services start redis
# On Ubuntu
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
sudo apt-get update
sudo apt-get install redis
sudo apt-get install redis-serverSe quisermos "zerar" o Redis, podemos executar o seguinte comando:
redis-cli flushall
O sidekiq é o executador de processos no background, utilizando as infos armazenadas no Redis para saber quais processos precisam ser executados, em qual ordem e com quais parâmetros.
Para utilizarmos o Sidekiq em um projeto Rails, precisamos adicionars suas gems ao Gemfile
# Gemfile
gem "sidekiq", "~> 7"
gem "sidekiq-failures"Não esqueçam do bundle install!
Também precisamos adicionar o comando do Sidekiq ao nosso terminal, para iniciá-lo! Podemos fazer isso com
bundle binstub sidekiqAlém das gems, precisamos configurar o Rails e o próprio Sidekiq!
# config/application.rb
# [...]
class Application < Rails::Application
# [...]
# defina o Sidekiq como o "executador de processos" do Rails
config.active_job.queue_adapter = :sidekiq
end# config/routes.rb
Rails.application.routes.draw do
# Sidekiq Web UI, only for admins.
require "sidekiq/web"
authenticate :user, ->(user) { user.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
endAlém das gems, precisamos configurar o Rails e o próprio Sidekiq!
# config/sidekiq.yml
:concurrency: 3
:timeout: 60
:verbose: true
:queues:
# Queue priority:
# https://github.com/sidekiq/sidekiq/wiki/Advanced-Options
- default
- mailers