django學習之- 數據緩存
阿新 • • 發佈:2017-12-11
lib 周期 pro decorator 變量名 永不 nag ibm enc
5種配置:
開發調試
CACHES = {
‘default‘: {
‘BACKEND‘: ‘django.core.cache.backends.dummy.DummyCache‘, # 引擎
內存
CACHES = {
‘default‘: {
‘BACKEND‘: ‘django.core.cache.backends.locmem.LocMemCache‘,
‘LOCATION‘: ‘unique-snowflake‘, # 註意這個必須唯一,相當於變量名
}
}
文件
CACHES = {
‘default‘: {
‘BACKEND‘: ‘django.core.cache.backends.filebased.FileBasedCache‘,
‘LOCATION‘: ‘/var/tmp/django_cache‘,
}
}
數據庫
CACHES = {
‘default‘: {
‘BACKEND‘: ‘django.core.cache.backends.db.DatabaseCache‘,
‘LOCATION‘: ‘my_cache_table‘, # 數據庫表
}
}
註:執行創建表命令 python manage.py createcachetable
memcache(python-memcache模塊)
CACHES = {
‘default‘: {
‘BACKEND‘: ‘django.core.cache.backends.memcached.MemcachedCache‘,
‘LOCATION‘: [
(‘172.19.26.240:11211‘,10),
(‘172.19.26.242:11211‘,11), # 後面的數字代表權重
]
}
}
memcache(pylibmc模塊)
通用配置:
‘TIMEOUT‘: 300, # 緩存超時時間(默認300,None表示永不過期,0表示立即過期)
‘OPTIONS‘:{
‘MAX_ENTRIES‘: 300, # 最大緩存個數(默認300)
‘CULL_FREQUENCY‘: 3, # 緩存到達最大個數之後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3)
},
‘KEY_PREFIX‘: ‘‘, # 緩存key的前綴(默認空)
‘VERSION‘: 1, # 緩存key的版本(默認1)
‘KEY_FUNCTION‘ 函數名 # 生成key的函數(默認函數會生成為:【前綴:版本:key】)
3種應用:全站緩存,views緩存,頁面局部緩存
實例:文件緩存
1:添加文件緩存配置到setting中,緩存目錄為項目下的cache
CACHES = { ‘default‘: { ‘BACKEND‘: ‘django.core.cache.backends.filebased.FileBasedCache‘, ‘LOCATION‘: os.path.join(BASE_DIR,‘cache‘), } }
添加緩存第一種,對views函數添加緩存
在需要添加緩存的函數名上添加裝飾器
from django.views.decorators.cache import cache_page
@cache_page(10) # 10表示數據緩存10秒
from django.views.decorators.cache importcache_page @cache_page(10) def cache(request): import time ctime = time.time() return render(request,‘cache.html‘,{‘ctime‘:ctime})
第二種,對頁面中個別功能進行緩存
第一步在網頁的頭部第一行添加:{% load cache %}
第二部使用{% cache 500 緩存key %} ....% endcache %}包裹住需要緩存的內容
註意:5000表示緩存超時時間5000秒,
{% load cache %} <!DOCTYPE htmlView Code> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ ctime }} {{ ctime }} {{ ctime }} {% cache 10 c1 %} {{ ctime }} {% endcache %} </body> </html>
第三種,對整個網站都使用緩存(需要用中間件)
修改setting的MIDDLEWARE,
- 開頭添加:‘django.middleware.cache.UpdateCacheMiddleware‘ # 這個中間件只有process_response
- 結尾添加:‘django.middleware.cache.FetchFromCacheMiddleware‘ # 這個中間件只有process_request
緩存流程:當請求進來通過中間件,到達最後一個request進行緩存查找,如果不存在則進行函數執行,完成後數據進行返回執行
response,response返回執行到最後一個response的時候,檢查緩存是否存在,不存在就進行緩存並返回給用戶。
應用的優先:全站最高-》視圖函數-》局部緩存最低(是根據請求生命周期可以分析出)
django學習之- 數據緩存