Banner do topo
Logo
Imagem de capa da postagem
Cristiano

Full Stack Developer

Utilizando Django LocMemCache

No desenvolvimento de aplicações web, é comum lidar com a necessidade de acessar APIs externas para obter dados. Um exemplo típico é a integração com a API do YouTube para buscar e exibir vídeos em seu site. No entanto, esse tipo de integração pode enfrentar limitações de requisições, o que pode levar à indisponibilidade do serviço. 

 

Neste post, vamos explorar como o Django LocMemCache pode ser utilizado para mitigar esse problema.

 

O Problema: Excesso de Requisições à API do YouTube

Recentemente, ao integrar a API do YouTube em um blog para exibir os últimos vídeos do canal, nos deparamos com um problema: o número de requisições à API excedia o limite permitido, resultando na indisponibilidade do serviço. Isso ocorreu porque cada visita à página que exibia os vídeos gerava uma nova requisição à API, rapidamente esgotando nossa cota diária.

A Solução: Utilizando LocMemCache

Há várias formas de contornar esse problema. Poderíamos, por exemplo, ter criado um servidor de cache externo, como o Redis.

Mas afim de manter a simplicidade do projeto, optei por resolver o problema, implementando o LocMemCache do Django. Essa solução simples e eficiente permite armazenar os dados em cache na memória do servidor, reduzindo significativamente o número de requisições à API do YouTube.

Passo a Passo da Implementação

1.  Configuração do LocMemCache no Django

Primeiro, configuramos o LocMemCache no arquivo settings.py do Django:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

 

2. Definição da View para Utilizar o Cache

Em seguida, ajustamos nossa view que faz a requisição à API do YouTube para utilizar o cache. Note que optei por limitar o cache a um período de 12 horas; desta forma, serão feitas apenas duas requisições diárias à API do YouTube:

import requests
from django.http import JsonResponse
from django.conf import settings
from django.core.cache import cache

def get_recent_videos(request):
    cache_key = 'recent_videos'
    timeout = 12 * 60 * 60  # 12 horas

    cached_videos = cache.get(cache_key)
    if cached_videos:
        return JsonResponse(cached_videos)

    api_key = settings.YOUTUBE_API_KEY
    channel_id = settings.YOUTUBE_CHANNEL_ID
    url = f"https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={channel_id}&maxResults=4&order=date&type=video&key={api_key}"

    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        cache.set(cache_key, data, timeout=timeout)  # Cache for 12 hours
        return JsonResponse(data)
    else:
        return JsonResponse({'error': 'Failed to fetch videos', 'details': response.json()}, status=response.status_code)

 

3. Testando a Solução

Para garantir que o cache está funcionando corretamente, podemos realizar um teste bem simples, criando e recuperando dados do cache na shell do Django:

python manage.py shell
from django.core.cache import cache
cache.set('test_key', 'test_value', timeout=60)
print(cache.get('test_key'))  # Deve imprimir 'test_value'

Resultados

Com a implementação do LocMemCache, conseguimos reduzir drasticamente o número de requisições à API do YouTube. Agora, os dados dos vídeos são armazenados em cache por 12 horas, garantindo que mesmo em períodos de alto tráfego, o número de requisições à API permaneça dentro dos limites permitidos. Isso não só evita a indisponibilidade do serviço, mas também melhora o desempenho do site ao reduzir o tempo de resposta para os usuários.

Considerações Finais

O uso do LocMemCache é uma solução eficaz para projetos pequenos e médios, onde a simplicidade e a eficiência são essenciais. No entanto, para projetos maiores ou que requerem cache persistente e compartilhado entre múltiplos servidores, é recomendável considerar soluções mais robustas, como Redis ou Memcached.

Conclusão

Integrar APIs externas em sua aplicação pode trazer benefícios significativos, mas é importante estar preparado para lidar com limitações de uso. Implementar um sistema de cache como o LocMemCache do Django é uma maneira eficaz de mitigar problemas relacionados a excesso de requisições, garantindo que seu serviço permaneça disponível e rápido para seus usuários.

 

Com essa abordagem, esperamos ter ajudado você a entender melhor como utilizar o LocMemCache no Django para otimizar suas integrações com APIs externas. 

 

Experimente essa solução em seu próximo projeto e compartilhe sua experiência conosco!

 

Tags:

#django #cache #api #redis

Comentários (0)