本文共 3165 字,大约阅读时间需要 10 分钟。
1.设定cache
cache可以设定为3中级别:数据库,文件,内存。 设定cache可以在setting.py中修改CACHE_BACKEND变量来修改。2. 安装Memcached
毋庸置疑memory cache是最快的缓存了。安装相关步骤如下: 1)安装Memcached 网站: 2)安装Memcached Python bindings,有两个版本可供选择 a)cmemcache :http://gijsbert.org/cmemcache/ . b)python-memcache:http://www.danga.com/memcached/ 3)配置CACHE_BACKEDND 配置Memcached的IP和端口。如下所示,Memcached支持多服务器互联。 如果设置多个IP,Memcached会将这些主机视为一个整体。 CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'Note:Memcached的缺点,因为时内存cache,所以服务器down时,会丢失。
3.Database Caching
1)创建cache数据库 python manage.py createcachetable [cache_table_name] 2)配置CACHE_BACKEND CACHE_BACKEND = 'db://cache_table_name'Note:数据库缓存后端使用settings文件指定的同一数据库,并且只能是相同的.即指定为sqlite则,缓存也是用它。
4.Filesystem Caching 1)设置cache目录
以file://开头。例子:若linux设置为/var/tmp/django_cache目录 则指定:CACHE_BACKEND='file:///var/tmp/django_cache 若为windows,指定:c:/foo/bar目录 则指定为:file://c:/foo/barNote:指定的目录需要确保可读写。
5.Local-Memory Caching
如果没有条件安装Memcached,那么Local-Memory也是个不错的选择。 简单方便,只是该方法cache能力比较弱。设置方法: CACHE_BACKEND = 'locmem:///'6.Dummy Caching(For Development)
该设置是为了开发有cache的站点,但是在开发时不想cache来实现的。 设置方法: CACHE_BACKEND = 'dummy:///'7.CACHE_BACKEND参数设定 CACHE_BACKEND可以设定超时、最大cache数、达到最大数时的删除比率等参数。例子:
CACHE_BACKEND = 'memcached://127.0.0.1:1121/?timeout=30&max_entries=400&cull_percentage=2'
该值设定了超时30s,最大400个,当超时时删除1/2的内容。8.The Per-Site Cache
最简单的方法就是整站cache了。只需要添加以下MiddleWare即可。 1)MIDDLEWARE_CLASSES = { 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware’, } Note:按照常理,类的排序按照alphabetical比较好,这里必须把UpdateCacheMiddleware 排在最上面,可以参见 2)添加cache设定 a)CACHE_MIDDLEWARE_SECONDS-每个页面cache的时间单位/s b)CHAHE_MIDDLEWARE_KEY_PREFIX 如果缓存被多个使用相同Django安装的网站所共享, 那么把这个值设成当前网站名,或其他能代表这个Django实例的唯一字符串,以避免key发生冲突。如果你不在意的话可以设成空字符串。Notes:
1)缓存中间件缓存每个没有GET或者POST参数的页面,即如果用户请求页面并在查询字符串里传递GET参数或者POST参数, 中间件将不会尝试得到缓存版本的页面,如果你打算使用整站缓存,设计你的程序时牢记这点,例如, 不要使用拥有查询字符串的URLs,除非那些页面可以不缓存 2)可以只对匿名用户缓存,设置CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True9.The Per-View Cache 1)定义Per-view cache
django.views.decorators.cache 中定义了一个cache_page装饰着,可以用来cache view。 例子: from django.views.decorators.cache import cache_pagedef my_view(request):
#.... my_view = cache_page(my_view,60*15)当然也可以用python的decorator语法:
@cache_page(60*15) def my_view(request): #... 2)通过URL指定view cache 1)中的例子时通过硬编码实现的cache,这显然不是好的方法。如果向将views用在没有cache的 站点中,则不能复用。以下时推荐的方法: from django.views.decorator.cache import cache_pageurlpatterns = patterns("",
(r'^foo/(/d{1,2})/$,cache_page(my_view,60*15)), )10.Templage Fragment Caching
例子: #footemplate.html {% load cache %} #..... {% cache 500 sidebar %} ...sidebar... {% endcache %}11.The Low-Level Cache API
很多时候并不是想cache整个page,或者一些view也不适合整个cache。这时候就会用到 Django提供的低级的API接口。它可以cache所有的东东。例子: from django.core.cache import cache cache.set('my_key','hello,world!',30)#设定cache变量my_key,cache 30s,如果time不设置,则默认为setting中设置的值。 cache.get('my_key','has expired')#取出cache的my_key变量,如果过期,则返回has expired cache.add('add_key', 'new value')#如果add_key过期,则设置新的为new value,否则不会添加#设置多个接口例子:
cache.set('a',1) cache.set('b',2) cache.get_many(['a','b'])返回一个字典 {'a':1,'b':2}11.更多cache
还有很多可用的cache相关资源。这里不再记述。 <END>转载地址:http://xzxci.baihongyu.com/