Django点滴(一)---缓存
Cache缓存是web框架以及REST/SOA架构的设计原则之一。
Caching基本过程IF 存在某个页面或数据的缓存
THEN 返回缓存中的页面或数据
ELSE
重新生成页面或获取数据
保存新页面或数据
返回新页面或数据
https://docs.djangoproject.com/en/1.4/topics/cache/
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