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.py
Defina 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 LOCATION
especifica 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.py
adicione 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_page
Por 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.add
o 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_set
o 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.delete
Exclua 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.clear
o 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.