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 minutes def 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