Explicação detalhada do mecanismo de cache do Django no combate na web do Python

e87fc3348cd6485abef0df87cb709ccb.png


Palavras-chave: Python, desenvolvimento web, Django, caching


1. O que é cache? Por que o cache é necessário?

No desenvolvimento web, um cache é uma área de armazenamento temporária usada para armazenar dados. Melhora o desempenho e a capacidade de resposta do aplicativo e reduz a carga no servidor.

Quando um usuário visita uma página da web, o servidor executa uma série de operações para gerar conteúdo dinâmico, e essas operações podem incluir consultas de banco de dados, cálculos complexos e assim por diante.

Isso consumiria muito tempo e recursos de computação se essas operações fossem executadas novamente toda vez que o usuário as solicitasse. Ao usar o cache, esses resultados de cálculo podem ser salvos temporariamente e os dados no cache serão retornados diretamente quando o usuário solicitar na próxima vez, economizando tempo e recursos.

1.1 Tipos e Cenários de Aplicação de Cache

No Django, você pode usar vários tipos de caches, incluindo caches na memória, caches de banco de dados, caches de arquivos e muito mais. Diferentes tipos de cache são adequados para diferentes cenários. A seguir, apresentarei vários tipos de cache comuns e seus cenários de aplicação.

1.1.1 Cache de memória

O cache de memória é para armazenar dados na memória e a velocidade de leitura é muito rápida. É adequado para dados lidos com frequência, mas que não precisam ser armazenados permanentemente, como conteúdo de página gerado dinamicamente, status de login do usuário, etc. No Django, você pode usar uma biblioteca de terceiros  django-redis para implementar o cache de memória. Para obter detalhes, consulte a documentação oficial.

1.1.2 Cache do banco de dados

Cache de banco de dados é para armazenar dados no banco de dados, que pode realizar o armazenamento persistente de dados. É adequado para dados que precisam ser armazenados por muito tempo, como informações do usuário, conteúdo do artigo etc. No Django, você pode usar o back-end de cache de banco de dados integrado para implementar o cache de banco de dados com configuração simples.

1.1.3 Cache de arquivo

O cache de arquivos armazena dados no sistema de arquivos e é adequado para armazenar em cache um grande número de arquivos estáticos, como imagens, CSS, JavaScript etc. Ele pode reduzir a pressão do servidor e melhorar a velocidade de leitura de arquivos. O Django fornece um back-end de cache de arquivo embutido, que é muito conveniente de usar.

1.2 O princípio básico do mecanismo de cache do Django

O princípio básico do mecanismo de cache do Django é realmente muito simples, ou seja, "armazenar e reutilizar". Vejamos primeiro um código:

from django.core.cache import cache

# 存储数据到缓存
cache.set('my_key', 'hello, world!', 30)

# 从缓存中获取数据
value = cache.get('my_key')

No código acima, o cache é primeiro importado de django.core.cache. Em seguida, use o método cache.set para armazenar um par chave-valor no cache, onde 'my_key' é a chave, 'hello, world!' é o valor e 30 é o período de validade do cache (unidade: segundo) . Em seguida, use o método cache.get para obter o valor correspondente do cache por meio da chave.

1.3 Cenários de Aplicação do Django Caching

No desenvolvimento da Web com Django, o cache pode ser aplicado em vários cenários, como:

  • Armazene em cache os resultados da consulta ao banco de dados para reduzir a pressão de consulta no banco de dados

  • Armazena em cache páginas HTML geradas dinamicamente para melhorar a velocidade de carregamento da página

  • Armazene os resultados do cálculo para reduzir o tempo de cálculos repetidos

2. Configuração de cache e uso do Django

Agora vamos ver como configurar e usar cache no Django.

2.1 Configuração de cache

2.1.1 Configuração do cache Memcached

No arquivo de configuração do Django, podemos  CACHES configurar o back-end do cache definindo items. A seguir está a configuração do memcached:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

A configuração acima usa o Memcached como back-end do cache e o endereço é local  127.0.0.1:11211.
BACKEND é o back-end de cache que escolhemos LOCATION e é o endereço e a porta do servidor Memcached. Você pode escolher diferentes back-ends de cache de acordo com suas necessidades e configurá-los de acordo.

2.1.2 Configuração do cache Redis

  • Instale a biblioteca cliente Redis para Python:

pip install redis
  • settings.pyDefina as configurações de cache no arquivo do seu projeto Django :

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',  # Redis服务器的连接地址
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

O parâmetro aqui LOCATIONespecifica o endereço de conexão do servidor Redis. Você pode modificá-lo para o endereço e o número da porta do seu servidor Redis de acordo com a situação real.

  • Configure o Redis como back-end de armazenamento de sessão (opcional):

Se você quiser usar o Redis como back-end de armazenamento para sessões do Django, settings.pyadicione o seguinte ao arquivo:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

Dessa forma, o Django usará o cache Redis como o back-end de armazenamento da sessão.

  • Execute o comando de migração:

Após configurar o cache Redis, execute o seguinte comando para aplicar as alterações nas configurações do cache:

python manage.py migrate

2.2 Uso do cache

 No Django, você pode armazenar em cache a saída das funções de exibição usando decoradores  @cache_page ou funções auxiliares  . cache_pagePor exemplo

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # 缓存 15 分钟
def my_view(request):
    # 处理视图函数的逻辑
    return HttpResponse('Hello, World!')

O código acima usa  cache_page um decorador para  my_view armazenar em cache a saída da função de exibição e o tempo de cache é de 15 minutos. Quando o usuário acessar a função view, se o cache for válido, o resultado armazenado em cache será retornado diretamente, caso contrário, a lógica da função view será executada e o cache será atualizado.

Além do armazenamento básico e recuperação de dados, o Django também fornece alguns outros métodos que podem nos ajudar a usar melhor o cache. Por exemplo:

  • Use  cache.add o método para adicionar dados ao cache quando a chave não existir

  • Use  cache.get_or_set o método para adicionar dados ao cache quando a chave não existir e retornar um valor

  • cache.delete Uma chave pode ser removida do cache usando  o método

  • Use  cache.clear o método para limpar todos os caches

Aqui estão alguns trechos de código para saber como usá-los:

  • 1. Use cache.addo método para adicionar dados ao cache:

from django.core.cache import cache

def add_data_to_cache(key, value):
    # 将数据添加到缓存中,如果键已存在,则不进行任何操作
    cache.add(key, value)
  • 2. Use cache.get_or_seto método para adicionar dados ao cache e retornar um valor:

from django.core.cache import cache

def get_or_set_data_from_cache(key, default_value):
    # 尝试从缓存中获取键的值,如果不存在,则将默认值设置到缓存,并返回默认值
    value = cache.get(key)
    if value is None:
        value = default_value
        cache.set(key, value)
    return value
  • 3. cache.deleteExclua uma chave do cache usando o método:

from django.core.cache import cache

def delete_data_from_cache(key):
    # 从缓存中删除指定的键
    cache.delete(key)
  • 4. Use cache.clearo método para limpar todos os caches:

from django.core.cache import cache

def clear_cache():
    # 清空所有缓存
    cache.clear()

3. Precauções de cache e técnicas de otimização

Há algumas coisas a serem observadas ao usar o armazenamento em cache e algumas técnicas de otimização a serem aplicadas para melhorar a eficácia e o desempenho do armazenamento em cache.

3.1 Controle de Granularidade do Cache

No projeto do cache, é necessário controlar razoavelmente a granularidade do cache. Se a granularidade do cache for muito grande, pode levar a uma baixa taxa de acertos do cache e desperdiçar espaço de armazenamento; se a granularidade do cache for muito pequena, pode causar falhas frequentes no cache e aumentar a carga do servidor. Portanto, é necessário dividir razoavelmente a granularidade do cache de acordo com cenários de negócios específicos e características de dados.

3.2 Estratégia de atualização de cache

Quando os dados mudam, precisamos atualizar o cache a tempo de manter a consistência dos dados. No Django, você pode usar semáforos  post_save, pre_delete etc. para ouvir as alterações do modelo e atualizar automaticamente o cache quando ocorrerem alterações. Além disso, você pode atualizar manualmente o cache para selecionar uma estratégia de atualização de cache apropriada de acordo com as necessidades comerciais específicas.

3.3 Processamento de invalidação de cache

O cache tem um determinado ciclo de vida. Quando o cache expira ou é excluído, é necessário um mecanismo de processamento correspondente. Você pode usar  cache.get métodos para obter valores em cache e determinar se o cache é válido. Se o cache falhar, podemos regenerar os dados e atualizar o cache para garantir a pontualidade e precisão dos dados.

4. Resumo técnico

Este artigo explica o mecanismo de cache do Django e apresenta em detalhes os tipos comuns de cache no Django e seus cenários de aplicação, configuração e uso, bem como precauções e técnicas de otimização sobre o cache. Amigos interessados ​​podem curtir, favoritar, seguir e em frente, obrigado.

Acho que você gosta

Origin blog.csdn.net/Rocky006/article/details/132201244
Recomendado
Clasificación