Django缓存使用详解:如何正确设置?
缓存(Cache)对于创建成功的网站和改善用户体验❀非常重要。不过,对于我们这样的人来说,我们是可以负担得起的。对于码农来说最重要的是学会如何使用缓存。今天我们来看看缓存的实现场景和工作原理,并详细介绍如何在Django中设置缓存并使用它们。 缓存是任何类型的介质的总称,可以更快地读取数据。还指其他可以加快数据读取速度的存储方式。用于临时数据存储,最常用的设备是速度快的存储器。一般来说,多次从数据库中提取必要数据的成本比从内存或硬盘中读取一次要大得多。对于中大型网站来说,利用缓存来减少数据访问次数是提高网站性能的关键之一。 在Django中,当用户请求到达视图时,视图将首先从数据库中获取数据并将其作为活动订阅放入模板中。输出是用户看到的网页。如果用户从数据库获取数据并授予所有请求,性能将显着下降。不仅服务器会承受很大的压力,而且客户也无法得到即时响应。如果发布的结果能够更快地被缓存,那么每次传入请求时,首先检查缓存中是否有匹配的资源。如果有,则直接从缓存中取出并返回结果,节省了数据检索和传输的时间。时间不仅提高了系统性能,也提高了用户体验。 让我们看一个实际的博客示例。每次我们访问主页时,下面的视图都会从数据库中提取文章列表并将其复制到模板中。一般来说,我们的博客更新不频繁,所以文章列表不会变化。这样,当用户在一段时间内多次访问主页时,再次读取相同的数据是一种浪费。 使用Cache可以帮助我们解决这个问题。当用户第一次访问博客主页时,我们从数据库中检索帖子列表并将它们存储在缓存中(通常是内存,具体取决于您的情况)。当用户在组时间内重新访问主页时,Django首先检查缓存是否已过期(本例为15分钟),然后检查文章列表资源是否存在缓存。如果存在,则直接从缓存中读取数据并渲染模板。 缓存最适合对页面性能要求不高的页面。缓存中存储的数据通常会被频繁访问,并且不会被频繁修改。让我们举一些应用示例: Django 提供了多种缓存方式。如果要使用缓存,需要先在settings.py中配置并启用。根据缓存工具的不同,您需要设置不同的后台缓存后端。 ? 数据库缓存 下面是使用 pyhon-memcached 的安装。 settings.py 配置中间件: 值得注意的是,当你配置信息时,并不会要求你全部编辑。您可以选择以上其中一项。对于单个站点,我更喜欢本地内存缓存。 尤其是全缓存和其他四种类型。相反,如果配置了整个缓存,则不存在其他缓存。 安装Cache后,您可以通过三种方式在代码中使用Cache。 这就是我想要更新的方式。必须改变逻辑部分的负责视图。 对于大多数码农s来说,我们只需要知道如何在django中使用缓存即可,不需要详细了解django后端的工作原理,比如Django如何存储数据关于选择。 media 以及 django 如何确定缓存是否耗尽。 我来介绍一下在Django中使用缓存的一些高级技巧。 一般来说,用户面临两个缓存:私有浏览器缓存(cache privée)和其提供者的缓存(cache public)。公共缓存被许多用户使用并由其他人控制。这会引发您不希望暴露的敏感数据的问题,例如存储在公共缓存中的银行帐号。因此,Web 应用程序需要告诉缓存哪些数据是私有的,哪些数据是公共的。 解决方案是指定页面缓存应该是私有的。要在 Django 中执行此操作,请使用 cache_control 视图装饰器: 此装饰器负责将适当的 HTTP 标头发送到域。 还有其他方法可以控制缓存参数。例如,HTTP 允许应用程序执行以下操作: 在Django中,可以使用cache_control视图指定这些缓存参数。在以下示例中,cache_control 告诉缓存在每次访问时重新验证缓存,并将缓存版本存储3600 秒。 在cache_control()中,任何HTTP Cache-Control指令都是有效的。这是完整列表: 默认情况下,Django的缓存系统使用请求的路径(例如blog/article/1)来生成缓存键。这意味着请求相同路径的不同用户将收到相同的缓存版本,无论客户端用户、cookie 和语言有何差异,除非您使用 Rice 标头告知缓存机制需要解析 cookie 和语言。请求头的差异。 。 要在 Django 中执行此操作,请使用variable_on_headers 视图。例如,以下代码告诉 Django 在读取缓存数据时考虑 User-Agent 和 cookie 的差异。 如果你想完全禁用使用 headers 的缓存,你可以使用 django.views.decorators.cache.never_cache 装饰器。如果不使用视图缓存,服务器不会阻止它。但是,浏览器等用户客户端仍会保留一些数据。在这种情况下,您可以使用never_cache来清除客户端的缓存。 什么是缓存
为什么要使用Cache
from django.shortcuts import render
def index(request):
# 读取数据库等并渲染到网页
article_list = Article.objects.all()
return render(request, 'index.html', {'article_list': article_list})
from django.shortcuts import render
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 秒数,这里指缓存 15 分钟
def index(request):
article_list = Article.objects.all()
return render(request, 'index.html', {'article_list': article_list})
注意: 在Django中使用缓存前,我们必需先做必要的设置。
缓存应用历史记录
Django 缓存设置
1.Memcached缓存是最快、最快的可用缓存之一。 Django 缓存框架原生支持。对于大多数情况,我们建议使用 Memcached,其中数据缓存在服务器端。使用前需要在pip上安装memcached插件python-memcached和pylibmc,可以同时支持多台服务器上的memcached。
# localhost
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
# unix soket
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
# 我们也可以给缓存机器加权重,权重高的承担更多的请求,如下
'LOCATION': [
('172.19.26.240:11211',5),
('172.19.26.242:11211',1),
]
}
}
2。数据库缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
3。文件系统缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FilebasedCache',
'LOCATION': '/var/tmp/django_cache',#这个是文件夹的路径
#'LOCATION': 'c:foobar',#windows下的示例
}
}
4。本地内存缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake'
}
}
5。 Django 配置全站缓存方法
MIDDLEWARE = [
# "django.middleware.cache.UpdateCacheMiddleware", #全站缓存配置一,必须放在第一位 # 放页面的时候,应该放在最前面
'django.middleware.common.CommonMiddleware',
# "django.middleware.cache.FetchFromCacheMiddleware", #全站缓存配置二,必须放在最后一位# 取页面放在这个位置
]
如何在Django代码中使用Cache
在视图中使用缓存
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
在 URLConf 路径中使用缓存
from django.views.decorators.cache import cache_page
urlpatterns = [
path('foo//', cache_page(60 * 15)(my_view)),
]
模型中使用缓存
{% load cache %}
{% cache 500 sidebar request.user.username %}
.. sidebar for logged in user ..
{% endcache %}
在Django中使用缓存的高级技巧
使用cache_control
from django.views.decorators.cache import cache_control
@cache_control(private=True)
def my_view(request):
# ...
from django.views.decorators.cache import cache_control
@cache_control(must_revalidate=True, max_age=3600)
def my_view(request):
# ...
使用varie_on_headers
from django.views.decorators.vary import vary_on_headers
@vary_on_headers('User-Agent', 'cookie')
def my_view(request):
...
使用 never_cache 禁用缓存
from django.views.decorators.cache import never_cache
@never_cache
def myview(request):
# ...
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。