`
qzriso
  • 浏览: 242482 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Django笔记10(缓存机制)

阅读更多
1.设定缓存
缓存选择在你的settings文件的 CACHE_BACKEND 设置中,如果你使用缓存但没有指定 CACHE_BACKEND ,Django将默认使用 simple:///

2. 内存缓冲
CACHE_BACKEND = ‘memcached://127.0.0.1:11211/’
CACHE_BACKEND = ‘memcached://172.19.26.240:11211;172.19.26.242:11211/’

3. 数据库缓存
(1) 使用如下语句创建一个缓存用数据表
python manage.py createcachetable [cache_table_name]
(2) 设置你的CACHE_BACKEND设置为”db://tablename”,这里的tablename是数据库表的名字
CACHE_BACKEND = ‘db://my_cache_table’

4. 文件系统缓存
CACHE_BACKEND = ‘file:///var/tmp/django_cache’
注意例子中开头有三个前斜线,前两个是file://,第三个是目录路径的第一个字符,/var/tmp/django_cache,如果你使用Windows系统,把盘符字母放在file://后面,像这样:’file://c:/foo/bar’
目录路径应该是*绝对*路径,即应该以你的文件系统的根开始,你在设置的结尾放置斜线与否无关紧要.
每个缓存值将被存储为单独的文件,其内容是Python的pickle模块以序列化(“pickled”)形式保存的缓存数据,每个文件的文件名是缓存键,为安全的文件系统使用释放

5. 本地内存缓存
CACHE_BACKEND = ‘locmem:///’

6. 简易缓存(用于开发阶段)
CACHE_BACKEND = ’simple:///’

7. 伪缓存(供开发时使用)
CACHE_BACKEND = ‘dummy:///’

8. CACHE_BACKEND参数
每个缓存后端都可能使用参数,它们在CACHE_BACKEND设置中以查询字符串形式给出,合法的参数为:
timeout:用于缓存的过期时间,以秒为单位。这个参数默认被设置为300秒(五分钟)
max_entries : 对于simple, local-memory与database类型的缓存,这个参数是指定缓存中存放的最大条目数,大于这个数时,旧的条目将会被删除。这个参数默认是300.
cull_frequency :当达到 max_entries 的时候,被接受的访问的比率。实际的比率是 1/cull_frequency ,所以设置cull_frequency=2就是在达到 max_entries 的时候去除一半数量的缓存。把 cull_frequency 的值设置为 0 意味着当达到 max_entries 时,缓存将被清空。这将以很多缓存丢失为代价,大大提高接受访问的速度。这个值默认是3
在这个例子中, timeout 被设成 60
CACHE_BACKEND = “locmem:///?timeout=60″
而在这个例子中, timeout 设为 30 而 max_entries 为 400 :
CACHE_BACKEND = “locmem:///?timeout=30&max_entries=400″

9. 站点级 Cache
一旦你指定了”CACHE_BACKEND”,使用缓存的最简单的方法就是缓存你的整个网站。这意味着所有不包含GET或POST参数的页面在第一次被请求之后将被缓存指定好的一段时间。

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.CacheMiddleware',
    'django.middleware.common.CommonMiddleware',
)

然后,在你的Django settings文件里加入下面所需的设置:
CACHE_MIDDLEWARE_SECONDS:每个页面应该被缓存的秒数
CACHE_MIDDLEWARE_KEY_PREFIX:如果缓存被多个使用相同Django安装的网站所共享,那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。如果你不在意的话可以设成空字符串。

10. 视图级缓存
更加颗粒级的缓存框架使用方法是对单个视图的输出进行缓存。这和整站级缓存有一样的效果(包括忽略对有 GET 和 POST 参数的请求的缓存)。它应用于你所指定的视图,而不是整个站点。

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request, param):
    # ...

11. 在 URLconf 中指定视图缓存

from django.views.decorators.cache import cache_page

urlpatterns = ('',
    (r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),
)

12. 低层次缓存API
下面是如何导入这个 API :
>>> from django.core.cache import cache
基本的接口是 set(key, value, timeout_seconds) 和 get(key) :
>>> cache.set(’my_key’, ‘hello, world!’, 30)
>>> cache.get(’my_key’)
‘hello, world!’
timeout_seconds 参数是可选的, 并且默认为前面讲过的 CACHE_BACKEND 设置中的 timeout 参数.
如果对象在缓存中不存在, 或者缓存后端是不可达的, cache.get() 返回 None :
# Wait 30 seconds for ‘my_key’ to expire…
>>> cache.get(’my_key’)
None
>>> cache.get(’some_unset_key’)
None
我们不建议在缓存中保存 None 常量,因为你将无法区分所保存的 None 变量及由返回值 None 所标识的缓存未中。
cache.get() 接受一个 缺省 参数。其指定了当缓存中不存在该对象时所返回的值:
>>> cache.get(’my_key’, ‘has expired’)
‘has expired’
要想一次获取多个缓存值,可以使用 cache.get_many() 。如果可能的话,对于给定的缓存后端, get_many() 将只访问缓存一次,而不是对每个缓存键值都进行一次访问。 get_many() 所返回的字典包括了你所请求的存在于缓存中且未超时的所有键值。
>>> cache.set(’a', 1)
>>> cache.set(’b', 2)
>>> cache.set(’c', 3)
>>> cache.get_many(['a', 'b', 'c'])
{’a': 1, ‘b’: 2, ‘c’: 3}
如果某个缓存关键字不存在或者已超时, 它将不会被包含在字典中。下面是范例的延续:
>>> cache.get_many(['a', 'b', 'c', 'd'])
{’a': 1, ‘b’: 2, ‘c’: 3}
最后,你可以用 cache.delete() 显式地删除关键字。这是在缓存中清除特定对象的简单途径。
>>> cache.delete(’a')
cache.delete() 没有返回值, 不管给定的缓存关键字对应的值存在与否, 它都将以同样方式工作。
13. 使用 Vary 头标
缺省情况下,Django 的缓存系统使用所请求的路径(比如: “/stories/2005/jun/23/bank_robbed/” )来创建其缓存键。这意味着对该 URL 的每个请求都将使用同一个已缓存版本,而不考虑 cookies 或语言偏好之类的 user-agent 差别。然而,如果该页面基于请求头标的区别(例如 cookies、语言或者 user-agent)产生不同内容,你就不得不使用 Vary 头标来通知缓存机制:该页面的输出取决与这些东西。

from django.views.decorators.vary import vary_on_headers
@vary_on_headers('User-Agent', 'Cookie')
def my_view(request):
# ...

传入 vary_on_headers 头标是大小写不敏感的; “User-Agent” 与 “user-agent” 完全相同。
分享到:
评论

相关推荐

    django笔记 django笔记

    本笔记将深入探讨Django的基础概念、核心功能以及实际应用。 1. **Django简介**: Django是由两位美国开发者在2005年创建的开源项目,它遵循MVC(模型-视图-控制器)设计模式,但更倾向于MTV(模型-模板-视图)...

    千锋教育Django笔记

    【千锋教育Django笔记】是一份专门为初学者设计的学习资料,它涵盖了Django框架的基础知识和实战技巧。Django是Python编程语言中一个强大的、免费的开源Web应用框架,它遵循模型-模板-视图(MTV)架构模式,旨在简化...

    千锋Django笔记.rar

    【千锋Django笔记】是针对Python Web开发框架Django的一份详细学习资料,这份笔记可能包含了从基础知识到高级特性的全面讲解。Django是一个高效、成熟且功能强大的开源Web框架,它遵循“DRY(Don't Repeat Yourself...

    python+django学习笔记

    对于大型网站,Django的分层Session和缓存机制也能有效提高性能。还有Django管理后台,允许开发者快速创建后台管理系统,方便对数据进行增删改查。 在"python-month3-master"这个文件夹中,可能包含了作者在第三个...

    django学习笔记,共15章+sql操作命令

    **Django学习笔记** Django,作为Python编程语言中的一个强大Web框架,是开发者们构建高效、可扩展网站的首选工具。这篇学习笔记涵盖了从基础到高级的Django知识,旨在帮助初学者快速掌握这个框架,并提升有经验的...

    Django入门笔记.doc

    Django入门笔记主要涵盖以下几个关键知识点: 1. **创建项目**:Django是Python的一款Web框架,用于快速开发高效、可维护的网站。创建项目是使用Django的第一步,通过命令行工具`django-admin startproject project...

    Python Django Web 点餐项目课件、源代码、课堂笔记

    此外,缓存机制、数据库优化、异步任务处理(如Celery)等都是提升性能的关键。 12. **课堂笔记** 学习过程中,课堂笔记会记录重要的概念、示例代码和讲解,有助于巩固理解和回顾。 13. **源代码** 提供的源代码...

    DJANGO课件的代码

    同时,Django还提供了缓存机制和性能优化策略。 在【描述】中提到的"为了方便以后重装系统的时候不用到处乱找",这表明这些代码可能包含了个人的学习笔记、项目实例或特定配置,可能是对Django某些特性的具体应用,...

    Mysql、Python、Django、Flask面试笔记大全

    深入理解Python的内存管理机制、装饰器、生成器也是进阶的话题。 Django是基于Python的Web框架,它提供了快速开发和健壮功能。面试时,需要对Django的模型(ORM)、视图、模板、URL路由有深入了解。了解如何创建...

    全套百度云教程:python基础+进阶+项目篇 (含Django和Tornado)

    8. **缓存机制**:理解缓存的作用及实现方式。 9. **静态文件处理**:管理静态资源如CSS、JavaScript等。 #### 四、Tornado框架 Tornado是一个异步Web服务器和异步网络库,非常适合用于构建实时Web服务和高并发...

    Django框架资料

    8. 表单和表单处理:Django提供了一套强大的表单处理机制,允许从模型生成表单、自定义表单类以及处理用户提交的数据。表单验证和错误处理也是其中的重要部分。 9. 中间件(Middleware):中间件是Django提供的一种...

    Python Web的Django作业.zip

    9. **性能优化**:Django支持缓存机制,可以提高网站的响应速度,减轻服务器压力。 10. **部署与扩展**:Django支持多种数据库,如SQLite、MySQL、PostgreSQL等,且可以轻松地部署在各种服务器环境中,如Apache、...

    Django_Notes

    10. **静态文件和媒体文件管理**:Django区分了静态文件(如CSS、JavaScript)和用户上传的媒体文件,提供了方便的管理机制。 11. **国际化和本地化**:Django支持多语言应用,可以轻松地添加对不同地区的支持。 ...

    django-sheets:框架Django的主体概念

    10. **缓存(Caching)**:为了提高性能,Django提供了多种缓存机制,包括页面级、查询集级和片段缓存等。 “django-sheets”可能是对这些核心概念的详细讲解和实践指导,对于初学者和有经验的开发者来说都是宝贵的...

    用django搭建的在线js学习网站.zip

    3. **缓存机制**:使用Django的缓存框架减少数据库查询,提高响应速度。 4. **安全配置**:确保HTTPS启用,防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。 通过以上知识点的学习和实践,你可以成功地用Django...

    Django-Notes:Djanogo笔记

    【Django笔记】是关于Django框架的一系列学习记录,旨在深入理解并掌握这个流行的Python Web开发框架。Django是一个高效、强大且易用的开源Web应用框架,它遵循模型-视图-控制器(MVC)的设计模式,但在Django中被...

    Django_Learning:一个讲述我的Django学习笔记和项目的资料库

    这个名为"Django_Learning"的资料库,显然是一位学习者记录自己在探索Django框架过程中的笔记和项目实践。在这个资料库中,你可以期待找到一系列关于Django的教程、代码示例、项目实践以及可能的问题解决方案。 ...

    Python基于Django网络健身俱乐部网站设计毕业源码案例设计.zip

    - 性能优化:通过缓存机制、数据库索引、CDN加速等方式提升网站性能。 - 响应式设计:网站应具有良好的响应式布局,适应不同设备的屏幕尺寸,提供良好的移动端体验。 - 测试:编写单元测试和集成测试,确保代码质量...

    Django中session的使用笔记

    Django提供了内置的Session框架,支持多种存储方式,包括数据库、缓存、文件系统和Cookie。一般推荐将Session数据存储在数据库中,以确保安全性。如果选择存储在Cookie中,通常只存储一个Session ID,而敏感数据仍然...

    基于Django开发的一套组内知识分享系统,包括组内知识共享,以及周报总结.zip

    5. **权限控制**:为了保护团队内部资料的安全,系统可能利用Django的Permissions和Groups机制,对不同角色的用户分配不同的操作权限。 6. **前端界面**:使用HTML、CSS和JavaScript构建用户友好的界面,可能结合...

Global site tag (gtag.js) - Google Analytics