读书人

Django点滴(1)-缓存

发布时间: 2012-10-12 10:17:04 作者: rapoo

Django点滴(一)---缓存

Cache缓存是web框架以及REST/SOA架构的设计原则之一。

Caching基本过程

IF 存在某个页面或数据的缓存

THEN 返回缓存中的页面或数据

ELSE

重新生成页面或获取数据

保存新页面或数据

返回新页面或数据

https://docs.djangoproject.com/en/1.4/topics/cache/

Django如何连接Cache根据不同缓存方案,在settings.py进行配置Memcached
CACHES = {    'default': {        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',        'LOCATION': '127.0.0.1:11211',        'TIMEOUT': 60,        'OPTIONS': {            'MAX_ENTRIES': 1000        }    }}
本地内存
CACHES = {    'default': {        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',        'LOCATION': 'unique-snowflake'    }}
不同的缓存策略全站缓存在Settings.py中加入cache middleware,注意顺序。因为FetchFromCacheMiddleware在request阶段执行,该阶段的middleware执行顺序是:正向,出现在最上的最先执行(因此FetchFromCacheMiddleware在其他处理头信息的middleware之后运行);而UpdateCacheMiddleware在response阶段执行,该阶段的middleware执行顺序是:反向,出现在最上却最后执行(因此UpdateCacheMiddleware在其他任何更改头信息的middleware之后运行)。

MIDDLEWARE_CLASSES = (   'django.middleware.cache.UpdateCacheMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    #adds Cookie    ### GZipMiddleware adds Accept-Encoding    ### LocaleMiddleware adds Accept-Language    'django.middleware.common.CommonMiddleware',   'django.middleware.cache.FetchFromCacheMiddleware',)
CACHE_MIDDLEWARE_SECONDS = 3  ### in seconds


单个View缓存

利用Decorator针对单个视图进行缓存

from django.views.decorators.cache import cache_page@cache_page(60 * 15) ### i.e. 15 minutesdef my_view(request):    ...

模板内容缓存

{% load cache %}{% cache 500 sidebar %}    .. sidebar ..{% endcache %}

底层缓存API,手工操作手工执行缓存操作
>>> from django.core.cache import cache>>> cache.set('my_key', 'hello, world!', 30)>>> cache.get('my_key')'hello, world!'# Wait 30 seconds for 'my_key' to expire...>>> cache.get('my_key')None>>> cache.set_many({'a': 1, 'b': 2, 'c': 3}, version=1)>>> cache.get_many(['a', 'b', 'c']){'a': 1, 'b': 2, 'c': 3}>>> cache.delete('a')
MIDDLEWARE_CLASSES = (   'django.middleware.cache.UpdateCacheMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    #adds Cookie    ### GZipMiddleware adds Accept-Encoding    ### LocaleMiddleware adds Accept-Language    'django.middleware.common.CommonMiddleware',   'django.middleware.cache.FetchFromCacheMiddleware',)
CACHE_MIDDLEWARE_SECONDS = 3  ### in seconds

读书人网 >软件架构设计

热点推荐