Nesse post irei explicar como substituir o sistema de cache e sessão do Django para funcionar com o Redis. Vou explicar como instalar e alguns comandos do Redis. Depois como Django trabalha como o cache e sessão e logo em seguida vamos aprender a alterar o Django para utilizar o Redis como forma de armazenamento.
Redis
Redis é um armazenador de dados no formato "key-value" ou "chave-valor". O acrônimo Redis significa "REmote DIctionary Server". Os dados são armazenados por padrão são em memória, porém você pode configurá-lo para armazenar em disco.
Instalação
Acesse o tutorial oficial de instalação do Redis, baixe a versão mais nova e siga os passos descritos para finalizar a instalação.
Comandos básicos
Quando o Redis é instalado, ele cria um atalho para seu cliente chamado redis-cli e com ele podemos executar os comandos abaixo:
Primeiro abra o cliente:
>> redis-cli
Com o cliente aberto podemos escolher qual database queremos trabalhar, utilizando o comando select. Basta informar qual o índice da base que queremos utilizar.
127.0.0.1:6379 > select 1
Nesse caso selecionamos a base de índice 1 para realizar as consultas.
Se quisermos consultar todas as keys que estão armazenadas, basta utilizarmos o comando keys com um parâmetro "*".
127.0.0.1:6379[1] > keys *
Se nossas keys fossem nomeadas com o prefixo "cache" ou "session", poderíamos consultá-las assim:
127.0.0.1:6379[1] > keys cache:*
127.0.0.1:6379[1] > keys session:*
Existe também a lista completa de comandos.
Django
Utilizarei nesse exemplo versão "1.6.4" do Django.
pip install Django==1.6.4
Para instalar e configurar um ambiente para o Django basta seguir um dos tutoriais abaixo:
Inicie um novo projeto e faça as configurações abaixo.
Cache
- O Django vem com um framework de cache que segue a seguinte filosofia:
- Deve ser o mais rápido possível
- Deve provê uma interface consistente entre diferentes backends
- Deve ser extensível o suficiente para atender as necessidades do desenvolvedor
Toda a configuração de cache fica armazenado na variável CACHES no nosso settings.py.
Utilizarei a biblioteca django-redis como nosso backend de cache e session.
Vamos instalar o django-redis:
pip install django-redis
Agora abra seu arquivo settings.py e adicione a variável CACHES com os seguintes valores:
CACHES = {
'default': {
'BACKEND': '',
'LOCATION': '',
'OPTIONS': {
'CLIENT_CLASS': '',
}
}
}
O que significa esses valores??
BACKEND : Caminho para a classe que será responsável por realizar adicionar, remover, alterar os dados do cache.
LOCATION: Localização do cache para ser utilizado, no nosso caso é o IP:porta:Número do banco de dados
CLIENT_CLASS: Própria do django-redis, serve para determinar qual classe será utilizada como cliente.
Iremos utilizar as classes padrão do django-redis e sua configuração final ficará assim:
CACHES = {
'default': {
'BACKEND': 'redis_cache.cache.RedisCache',
'LOCATION': '127.0.0.1:6379:1',
'OPTIONS': {
'CLIENT_CLASS': 'redis_cache.client.DefaultClient',
}
}
}
Sessões
Para ativar a funcionalidade de sessão, é preciso editar a variável MIDDLEWARE_CLASSES no arquivo settings.py. Basta adicionar django.contrib.sessions.middleware.SessionMiddleware dentro da listagem.
settings.py
MIDDLEWARE_CLASSES = [
# [...] outros middlewares
'django.contrib.sessions.middleware.SessionMiddleware'
]
Por padrão a sessão já vem ativada.
Vamos utilizar uma sessão baseada no cache, como já foi instalado o django-redis só é adicionar as seguintes linhas no arquivo settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
SESSION_CACHE_ALIAS se refere a chave que configuramos no cache, se configurássemos mais que um cache, poderíamos informar outro valor.
- Links úteis:
Como testar
Vá até a pasta do nosso projeto e execute o syncdb para sincronizar a base de dados.
python manage.py syncdb
Inicie também o servidor de desenvolvimento do Django.
python manage.py runserver
Abra seu navegador e entre na página de administração do Django localhost:8000/admin.
Faça seu login para que seja gravado um registro de sessão na base.
Para visualizar se o registro foi gravado com sucesso, execute os seguintes comandos:
>> redis-cli
127.0.0.1:6379> select 1
127.0.0.1:6379[1]> keys *
1) ":1:django.contrib.sessions.cachemnpnqzfl03iwugb99q9ls4w0k2r74gs2"
Se tudo ocorreu como planejado, nesse momento temos as sessões e o cache sendo armazenados no Redis.
Espero que tenha gostado, até o próximo!
"Usando Redis para cache e sessão do Django" de "Lucas Magnum" está licenciado com uma Licença Creative Commons - Atribuição-NãoComercial-SemDerivações 4.0 Internacional.