django缓存设置(转载)
前言:
因最近公司网站承受访问压力过大,经常导致页面报错<wbr></wbr>,在研究django缓存时找了很多相关的资料,但没有见到有介绍<wbr></wbr>django缓存从配置到实现再到实现机制介绍的文章<wbr></wbr>,所以有了写这篇BLOG的想法,一来是可以加深自己对djang<wbr></wbr>o缓存的理解,并作为学习笔记,二是可以给那些刚对django入<wbr></wbr>门并想迫切在短时间内应用缓存功能的朋友们起到抛砖引玉的作用。
以下篇章仅做为个人笔记之用,假如你不幸看到了本文<wbr></wbr>,内容仅供参考,误人子弟的罪名实在太大,笔者可担当不起。。。
配置cache方式及内部实现机制:
django中cache大体分为三种,即针对全站的缓存配置<wbr></wbr>、针对视图的缓存配置、针对数据的缓存配置。其中针对视图及数据的<wbr></wbr>配置,大体都无需在settings.py中设置,唯独全站的缓存配置必须在settings.py中进行配置,且还有一点就是进行全站及视图缓存时要区分开匿名用户和已登陆用户<wbr></wbr>的显示,详见以下的CACHE_MIDDLEWARE<wbr></wbr>_ANONYMOUS_ONLY讲解。
项目中的settings.py文件:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions<wbr></wbr>.middleware.SessionMiddleware',
'django.contrib.auth.middleware<wbr></wbr>.AuthenticationMiddleware',
'django.middleware.cache<wbr></wbr>.CacheMiddleware ',
'django.middleware.common<wbr></wbr>.CommonMiddleware',
'django.middleware.doc.XViewMidd<wbr></wbr>leware',
# 'django.contrib.flatpages<wbr></wbr>.middleware.FlatpageFallbackMid<wbr></wbr>dleware',
'django.middleware.gzip.GZipMidd<wbr></wbr>leware ',
)
settings.py文件中的MIDDLEWARE<wbr></wbr>_CLASSES添加'django.middleware.cache<wbr></wbr>.CacheMiddleware'为启用全站缓存配置,此处的中间件排序位置很重要<wbr></wbr>,必须要将此CacheMiddleware放在'django.contrib.sessions<wbr></wbr>.middleware.SessionMiddleware', 'django.contrib.auth.middleware<wbr></wbr>.AuthenticationMiddleware '之下,因为此处两个文件都会往request中写入相应的数据<wbr></wbr>。此处针对配置全站缓存还必须指定默认的缓存时间CACHE<wbr></wbr>_MIDDLEWARE_SECONDS值及CACHE<wbr></wbr>_MIDDLEWARE_KEY_PREFIX值(可选)。
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
添加以上配置,此功能是配置全站缓存时有关匿名用户和登陆了的用户<wbr></wbr>视图是否从缓存中读取并显示,如果是True,即登陆用户读的数据<wbr></wbr>不会从缓存中读取。此选项针对视图进行缓存配置时同样奏效。
实现cache的编码实现:
针对全站缓存无需进行任何编码实现,针对试图及数据的缓存稍有区别<wbr></wbr>,可能最具可观性的还算是针对数据的缓存,详见以下编码实现:
针对数据编码实现:
from django.core.cache import cache
#存储缓存数据
cache.set('cache_key',data,60*15)#cache<wbr></wbr>_key为存储在缓存中的唯一值,data为存储的数据,60<wbr></wbr>*15为缓存数据的时间
#获取缓存数据
cache.get('cache_key',None)#cache<wbr></wbr>_key为储存缓存数据的唯一值
<script type="text/javascript"><!----></script> 针对视图编码实现:
from django.views.decorators.cache import cache_page
def BaCreate(request)
....
BaCreate = cache_page(BaCreate,60*9)
以上代码是在处理具体应用的代码中写入,如views.py中写入,在官方站点的文挡上还有另外一种方式及在方法前加上@cache<wbr></wbr>_page(60 * 15),但这种方式还没调试成功,估计还需配置什么<wbr></wbr>,或者版本不对。针对试图编码实现cache还有一种方式,就在urls.py中定义,这也是推荐的方式,详细定义如下:
urls.py文件:
from baindex
from django.views.decorators.cache import cache_page
(r'^ba/$', cache_page(baindex,1*60)),
此处就定义了baindex方法所对应视图的缓存<wbr></wbr>,至于为什么是做视图缓存所推荐的方式,这就留给你自己去想了。<wbr></wbr>:)
以上就是轻松玩转django缓存实现的全过程,至于你选择那种方<wbr></wbr>式,就看你自己的应用了,但我还是推荐视图+数据进行缓存<wbr></wbr>,当然视图只适合那些数据变动不大的页面,不过我想那些变动不大的<wbr></wbr>页面估计基本上没有,就算页面正文没有变动,页面的其它模块估计也<wbr></wbr>会要有相应的变动。不过现在不是流行起了Ajax吗<wbr></wbr>?可能Ajax在这里能得到很好的应用。
当然以上仅是cache的配置及实现过程,还有一点就是选择什么样<wbr></wbr>的CACHE_BACKEND就不属这篇BLOG的内容了<wbr></wbr>,不过要提醒下假如你用memcached的话,启动memcac<wbr></wbr>hed记得指定IP地址,笔者就忽略了此处害得冤枉花费了一整天的<wbr></wbr>时间。。
最后还是谈谈djano关于全站缓存及视图缓存的机制<wbr></wbr>,对于全站缓存我们完全可以将它看成是对全部视图进行缓存的实现<wbr></wbr>,这也是笔者在调试中发现的,在调试中发现某个URL被请求后所储<wbr></wbr>藏到cache中的key(唯一值)都是同一个。在django源<wbr></wbr>文件中的utils/cache.py文件中有获取每个页面所被缓存的key为views<wbr></wbr>.decorators.cache.cache_page<wbr></wbr>.lzz./showbaposts/.d41d8cd98f00<wbr></wbr>b204e9800998ecf8427e ,其中共分为四段,注解为:views.decorators.cache.cache<wbr></wbr>_page.(settings.py中的CACHE_MIDDLEWARE<wbr></wbr>_KEY_PREFIX值).(每个请求的页面地址).(获取request中相关属性的<wbr></wbr>md5编码值(调试时都为[])),还有一种key为'views.decorators.cache.cache<wbr></wbr>_header.%s.%s' % (key_prefix, request.path ),猜想功能是针对upstream 缓存和Vary headers的,对于这些也不展开研究了,详见django缓存<wbr></wbr>的相应文档。至于视图缓存中数据的储存和获取的实现在django<wbr></wbr>源文件下的views\middleware\cache<wbr></wbr>.py文件中的process_request和process<wbr></wbr>_response方法中。其在这里如果我们知道某个页面被缓存的<wbr></wbr>key后,我们完全可以在后台写个小脚本用来实现针对某个页面的的<wbr></wbr>数据来进行修改,这种应用就可以解决那些压力比较大的站点<wbr></wbr>,至于怎么解决,就不展开谈了。。。
<script type="text/javascript"></script>
分享到:
相关推荐
适用于 Django 的功能齐全的 redis 缓存后端。Django 的 Redis 缓存后端 这是一个Jazzband项目。通过贡献,您同意遵守贡献者行为准则并遵循指南。介绍django-redis 是 Django 的...您应该将 Django 缓存设置更改为类似
缓存就是为了防止重复计算,把那些消耗了大量资源的结果保存起来,下次访问时就不用再次计算了。缓存的逻辑: given a URL, try finding that page in the cache if the page is in the cache: return the cached ...
Django:Django缓存机制与性能优化.docx
以下是几种常用的Django缓存配置方法详解: 1. 开发调试缓存 开发调试缓存是Django框架提供的一个用于开发环境的缓存后端,它的作用主要是为了在开发过程中模拟缓存的行为,便于开发者观察和测试缓存对应用的影响...
以下是对Django缓存机制及其使用方法的详细阐述。 **一、缓存目的** 1. **减小过载**:缓存可以将常用数据存储在内存中,避免每次请求都直接访问数据库,减轻数据库压力,降低服务器过载的可能性。 2. **避免重复...
django 的 Redis 缓存后端Redis Django 缓存后端 Django 的 Redis 缓存后端文档可以在http://django-redis-cache.readthedocs.org/en/latest/找到。变更日志3.0.1确认支持 Django 3.2(无需更改代码)。3.0.0添加对 ...
django-redis-cache, 面向 Django的Redis缓存后端 Django 缓存后端 面向 Django的Redis缓存后端可以在 http://django-redis-cache.readthedocs.org/en/latest/ 找到文档。变更日志 1.7.1确认
django-cacheback, 使用 celery 来异步刷新缓存项的Django的智能缓存 Cacheback针对 Django的异步缓存的异步缓存刷新:这个库做什么?它是一个可扩展缓存库,可以使用 celery 或者任务asynchronously缓存陈旧缓存项...
在本资源中,"我的django专栏025阶段设置页面缓存的源码和视频"主要探讨了如何在Django框架中实现页面缓存以提高Web应用的性能。页面缓存是通过存储已渲染的HTML页面来减少服务器处理时间,从而加快用户请求响应速度...
**Python-YPlandjangoratelimit为Django提供基于缓存的限速** 在Web开发中,限速机制是防止恶意用户对服务器进行DoS(拒绝服务)攻击或滥用API的关键策略。`django-ratelimit`是YPlan公司贡献的一个开源库,它为...
在Django框架中,缓存机制是提升性能和效率的关键技术。它允许将频繁访问的数据存储在高速存储中,减少对数据库的直接访问,从而降低响应时间,提高用户体验。Django提供了六种不同的缓存策略,分别是开发调试、内存...
在请求中,从db中检索对象,并通过django-sql-caching缓存在内存中; 稍后,在同一请求中,将修改该对象并将其保存回数据库; 再次在相同的请求中,您尝试使用相同的查询检索相同的对象; 缓存的,现在已经过时...
在本文中,我们将深入探讨如何在Django框架中配置并使用Redis...请确保根据实际情况调整缓存设置,如缓存时间、最大连接数等,以达到最佳性能和资源利用率。同时,注意定期清理无效或过期的缓存,保持系统的稳定运行。
g缓存Wagtail的快速简单页面缓存,受Django缓存中间件启发。 | |状态Python包 建立快速开始遵循为什么要使用Wagtail缓存? Django具有强大的缓存中间件,该中间件已经具有有效缓存网页所需的功能。 但是,打开缓存...
Django的配置文件(settings.py)中可以设置数据库连接、缓存系统和其他环境相关参数。 13. **Django扩展**: Django拥有丰富的第三方库,如Django REST framework用于构建RESTful API,Django Channels支持...
今天我们就来看看缓存Cache应用场景及工作原理吧,并详细介绍如何在Django中设置Cache并使用它们。 什么是缓存Cache 缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储...
- **安装**:首先,通过pip安装`django-redis`库,然后在Django项目的settings.py中配置缓存设置。 - **配置**:指定Redis服务器的地址、端口、数据库编号等信息,并选择合适的序列化器和过期时间。 - **启用缓存**...
django-cache-manager django模型的简单缓存管理器,用于缓存模型的查询集。 缓存管理器将缓存已针对模型看到... 后端可以是任何实现django缓存API的缓存后端。 CACHES = { 'django_cache_manager.cache_backend':