Django緩存機制

如何提升網站併發量

QPS:Queries Per Second意思是「每秒查詢率」,是一臺服務器每秒可以相應的查詢次數,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準。
TPS:是TransactionsPerSecond的縮寫,也就是事務數/秒。它是軟件測試結果的測量單位。一個事務是指一個客戶機向服務器發送請求而後服務器作出反應的過程。客戶機在發送請時開始計時,收到服務器響應後結束計時,以此來計算使用的時間和完成的事務個數
-使用cdn
-精靈圖
-頁面本地緩存
-nginx作負載均衡,後臺服務作集羣化的部署
-後臺緩存(django中的緩存)
-數據庫的主從同步
-讀寫分離
-異步處理(celery:分佈式的異步任務框架)html

 

圖片防盜鏈:
-能夠經過refer控制
-nginx處理前端

緩存介紹

在動態網站中,用戶全部的請求,服務器都會去數據庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成用戶看到的頁面.python

當一個網站的用戶訪問量很大的時候,每一次的的後臺操做,都會消耗不少的服務端資源,因此必須使用緩存來減輕後端服務器的壓力.nginx

緩存是將一些經常使用的數據保存內存或者memcache中,在必定的時間內有人來訪問這些數據時,則再也不去執行數據庫及渲染等操做,而是直接從內存或memcache的緩存中去取得數據,而後返回給用戶.redis

Django中的6種緩存方式:緩存的位置

開發調試階段:沒有緩存
緩存到內存中
緩存到數據庫
緩存到文件
緩存到redis數據庫

Django種緩存的文件配置,其它請見(https://www.cnblogs.com/liuqingzheng/articles/9803351.html#_label1

文件緩存(把緩存數據存儲在文件中)django

settings.py配置後端

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定緩存使用的引擎
  'LOCATION': 'G:\python\day76\代碼筆記\cache',        #指定緩存的路徑
  'TIMEOUT':300,              #緩存超時時間(默認爲300秒,None表示永不過時)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大緩存記錄的數量(默認300)
   'CULL_FREQUENCY': 3,           # 緩存到達最大個數以後,剔除緩存個數的比例,即:1/CULL_FREQUENCY(默認3)
  }
 }
}

 

緩存粒度

Django提供了不一樣粒度的緩存,能夠緩存某個頁面,能夠只緩存一個頁面的某個部分,甚至能夠緩存整個網站.瀏覽器

全站緩存緩存

單頁面緩存

局部緩存

Django中的緩存應用

單頁面緩存:在視圖函數上方加一個裝飾器

視圖函數中的緩存

from django.views.decorators.cache import cache_page
import time
@cache_page(5) #緩存時間爲5秒
def index(request):
    ctime = time.time()
    return render(request,'index.html',{'time':ctime})

這個時間點擊一次五秒後才能繼續刷新

 這裏咱們用文件緩存

刷新瀏覽器,能夠看到在剛纔配置的目錄下生成的緩存文件

經過實驗能夠知道,Django會以本身的形式把緩存文件保存在配置文件中指定的目錄中.

局部緩存

   如今兩個時間同時刷新,咱們如今須要設置當前時間爲緩存,須要在前端頁面操做

index.html

{#5 是超時時間,test是這個緩存的key,若是這頁面寫了10個,就沒有指定標識去找哪個,因此test要指定惟一的key值#}
<body>
{% load cache %}
{{ time }}
<br>
{% cache 5 'test' %}
當前時間:{{ time }}
{% endcache %}
</body>

全站緩存

全站就是全部路由都要用到緩存,那就要應該用到Django中間件裏.

用戶的請求經過中間件,通過 一系列的認證等操做,若是請求的內容在緩存中存在,則使用FetchFromCacheMiddleware獲取內容並返回給用戶

當返回給用戶以前,判斷緩存中是否已經存在,若是不存在,則UpdateCacheMiddleware會將緩存保存至Django的緩存之中,以實現全站緩存

FetchFromCacheMiddleware重寫了process_request方法

UpdateCacheMiddleware重寫了process_response方法

緩存整個站點,是最簡單的緩存方法

在 MIDDLEWARE_CLASSES 中加入 「update」 和 「fetch」 中間件
MIDDLEWARE_CLASSES = (
    ‘django.middleware.cache.UpdateCacheMiddleware’, #第一
    'django.middleware.common.CommonMiddleware',
    ‘django.middleware.cache.FetchFromCacheMiddleware’, #最後
)
「update」 必須配置在第一個
「fetch」 必須配置在最後一個
CACHE_MIDDLEWARE_SECONDS=5 全站緩存都是五秒
相關文章
相關標籤/搜索