Django 緩存

官方文檔html

緩存的出現就是爲了減輕對數據庫的壓力和加快內存訪問的速度.咱們的訪問請求最終都是返回一個大的字符串,緩存就是將這段字符串直接存儲起來,下次你來了,不用通過view去數據庫或者內存拿到數據再渲染返回,而是直接從緩存裏把上次的字符串交給你,很大的提升了速度,通常咱們會將持久不變的,訪問量大的數據放到緩存.(好比說一篇好的博客,不少人看,可是做者又不修改),實時性很高的不放緩存,好比博客訪問量.python

Django自帶緩存,提供了6中存儲模式:數據庫

  1. 開發調試
  2. 內存
  3. 文件
  4. 數據庫
  5. Memcache緩存(python-memcached模塊)
  6. Memcache緩存(pylibmc模塊)

每種存儲模式只須要修改配置就能夠了,其餘早django中的操做都是同樣,django

咱們先來看配置,寫在django settings.py裏面就ok:緩存

 1 # 此爲開始調試用,實際內部不作任何操做
 2     # 配置:
 3         CACHES = {  4             'default': {  5                 'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎
 6                 'TIMEOUT': 300,                                               # 緩存超時時間(默認300,None表示永不過時,0表示當即過時)
 7                 'OPTIONS':{  8                     'MAX_ENTRIES': 300,                                       # 最大緩存個數(默認300)
 9                     'CULL_FREQUENCY': 3,                                      # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3)
10  }, 11                 'KEY_PREFIX': '',                                             # 緩存key的前綴(默認空)
12                 'VERSION': 1,                                                 # 緩存key的版本(默認1)
13                 'KEY_FUNCTION' 函數名                                          # 生成key的函數(默認函數會生成爲:【前綴:版本:key】)
14  } 15  } 16 
17 
18     # 自定義key函數
19     def default_key_func(key, key_prefix, version): 20         """
21  Default function to generate keys. 22 
23  Constructs the key used by all other methods. By default it prepends 24  the `key_prefix'. KEY_FUNCTION can be used to specify an alternate 25  function with custom key making behavior. 26         """
27         return '%s:%s:%s' % (key_prefix, version, key) 28 
29     def get_key_func(key_func): 30         """
31  Function to decide which key function to use. 32 
33  Defaults to ``default_key_func``. 34         """
35         if key_func is not None: 36             if callable(key_func): 37                 return key_func 38             else: 39                 return import_string(key_func) 40         return default_key_func
開發調試
 1 # 此緩存將內容保存至內存的變量中
 2     # 配置:
 3         CACHES = {  4             'default': {  5                 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  6                 'LOCATION': 'unique-snowflake',  7  }  8  }  9 
10     # 注:其餘配置同開發調試版本
內存
 1 # 此緩存將內容保存至數據庫
 2 
 3     # 配置:
 4         CACHES = {  5             'default': {  6                 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  7                 'LOCATION': 'my_cache_table', # 數據庫表
 8  }  9  } 10 
11     # 注:執行建立表命令 python manage.py createcachetable
數據庫
Memcache緩存(python-memcached模塊)
Memcache緩存(pylibmc模塊)
# 此緩存將內容保存至文件
    # 配置:
 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } } # 注:其餘配置同開發調試版本
文件

應用:ide

Django提供的緩存支持memcached

  1. 單獨的頁面緩存
  2. 頁面局部緩存
  3. 全局緩存

1單獨的views緩存,存儲位置設置爲文件函數

Django settings.py 裏面配置:url

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': os.path.join(BASE_DIR,'caches'),#cache的存儲位置  } }

views:spa

from django.shortcuts import render from django.views.decorators.cache import cache_page @cache_page(10) # 導入模塊後加上裝飾器就就完成了單獨的頁面緩存
import time def cache001(req): t=time.time() return render(req,'cache001.html',{'time':t})
#這裏用了一個動態的時間來驗證是否緩存



#結果就是第一次發起請求後,整個頁面的返回字符串存儲到了文件位置,再次訪問的時候直接讀取到了文件裏面的內容返回,因此時間在緩存生命週期裏面是不會改變的


頁面局部的緩存

不少時候咱們頁面只須要一些數據緩存:

settings..py 配置,用了數據庫

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table',  # 數據庫表
 } } #寫在sttings裏面後執行下, python manage.py createcachetable ,就能再數據庫中找到表了

局部緩存是寫在HTML中的:

#HTNL
 {% load cache %}#加載cache
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>{{ time }}</p> {% cache 5000 mycacher %} #5000表明超時時間, mycacher表明緩存的key, {{ time }} #須要緩存的內容 {% endcache %} </body>
</html>

當我麼你發起請求後,數據庫緩存表就多了點東西了:

全局緩存:

此次咱們將緩存儲存在內存裏面,形式會是key value格式,因此會制定一個key:

CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'lglgl',#制定一個內存緩存的引用
 } }

全局緩存會利用到咱們的中間件,在settings middleware中加上下面2箇中間件:

MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware',#-----放在最前面,用於儲存緩存
        # 其餘中間件...
        'django.middleware.cache.FetchFromCacheMiddleware',#----放在最後面,用於獲取緩存
    ]

搞定.這就是django 提供的3中緩存方式和集中存儲地方,應該說是很強大了.

相關文章
相關標籤/搜索