目錄html
Django 是動態網站,通常來講須要實時地生成訪問的網頁,展現給訪問者,這樣,內容能夠隨時變化,可是從數據庫讀屢次把所須要的數據取出來,要比從內存或者硬盤等一次讀出來 付出的成本大不少。而使用緩存的話,能夠將數據保存在緩存中,下次訪問的時候直接從緩存中得到數據,而不用去請求後端數據庫,這樣服務器能夠很快的響應請求,從而提升加載速度。python
對於給定的網址,嘗試從緩存中找到網址,若是頁面在緩存中,直接返回緩存的頁面,若是緩存中沒有,一系列操做(好比查數據庫)後,保存生成的頁面內容到緩存系統以供下一次使用,而後返回生成的頁面內容。linux
通常來講咱們用 Django 來搭建一個網站,要用到數據庫等。redis
from django.shortcuts import render def index(request): # 讀取數據庫等 並渲染到網頁 # 數據庫獲取的結果保存到 queryset 中 return render(request, 'index.html', {'book_list':book_list})
像這樣每次訪問都要讀取數據庫,通常的小網站沒什麼問題,當訪問量很是大的時候,就會有不少次的數據庫查詢,確定會形成訪問速度變慢,服務器資源佔用較多等問題。數據庫
當使用了cache後,訪問狀況就變化了。django
from django.shortcuts import render from django.views.decorators.cache import cache_page @cache_page(60 * 15) # 秒數,這裏指緩存 15 分鐘,不直接寫900是爲了提升可讀性 def index(request): # 讀取數據庫等 並渲染到網頁 return render(request, 'index.html', {'book_list':book_list}) # 訪問一個網址時, 嘗試從 cache 中找有沒有緩存內容 # 若是網頁在緩存中顯示緩存內容,不然生成訪問的頁面,保存在緩存中以便下次使用,顯示緩存的頁面。
也就是默認利用本地的內存
來當緩存,速度很快。後端
固然可能出來內存不夠用的狀況api
from django.conf import settings print(settings.CACHES) {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } }
下面咱們就來介紹一下各類緩存的配置:緩存
這個很簡單,就是將數據緩存在指定的目錄中。配置以下:服務器
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', # linux 中的目錄,前提目錄必須存在 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 1000 } } }
Memcached 是目前 Django 可用的最快的緩存,
可是memcache須要你的服務器支持,也就是說須要有Memcache服務,
Linux系統安裝Memcached,首先要先安裝libevent庫。
$ yum -y install libevent ibevent-devel 聯網自動下載安裝 $ yum -y install install memcached linux安裝memcached 的方法我就不說了,本身去找去
而後須要pip3安裝Memcached的插件Python-mencached 和 pylibmc
$ pip3 install Python-mencached $ pip3 install pylibmc
最後在setting.py配置:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 2000 } } }
這種緩存方式會將數據保存在服務器的內存中。
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 2000 } } }
最推薦的緩存方式是Memcache
或者Local-memory
,要不就是文件緩存
redis相信你們都很熟悉了,和memcached同樣是一個高性能的key-value數據庫,至於什麼是緩存服務器,度娘都有很明白的介紹了,
安裝該數據庫是爲了作服務器緩存。如下兩種狀況都適合使用服務器緩存:
1)數據非常常更新。若每次都從硬盤讀取一次,浪費服務器資源、拖慢響應速度。
2)數據更新頻率較高,服務器負擔比較大。
這些數據只需天天更新一次。而我每次都從數據庫獲取相應的數據,計算統計排行狀況和閱讀數。很明顯浪費服務器資源,浪費時間。解決方法是定時統計一次數據,保存到數據庫或文件中。每次讀取數據從中獲取。
若保存到數據庫,還須要額外創建一張對應的表存儲數據。在Django中創建表一般作法是創建一個模型。看似簡單,問題調試麻煩、開發時長久。因此我一直拖着沒處理該問題。畢竟一開始訪問量不是不少。後來很多網友訪客打開慢(固然服務器在國外也是個緣由),查了資料發現Redis內存數據庫。能夠將數據寫入到內存,再進行讀寫。減小計算量,能夠有效提升服務器響應速度。
這麼一來,我就不用建立新表建立模型。直接將數據寫入緩存,定時更新。獲取數據從服務器緩存獲取便可。
下面我就來介紹如何在Django中配置使用redis數據庫!
pip3 install django-redis
# redis 緩存數據庫配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://192.168.32.130:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100}, "DECODE_RESPONSES":True, "PASSWORD": "root", } } }
# 視圖中使用redis緩存數據庫 from django_redis import get_redis_connection conn = get_redis_connection('default')
在django中的settings配置文件中設置
'django.middleware.cache.UpdateCacheMiddleware', # 其餘中間件... 'django.middleware.cache.FetchFromCacheMiddleware',
from django.views.decorators.cache import cache_page @cache_page(60 * 15) def cache(request): # return HttpResponse('hello') # 當咱們第一次訪問的時候,redis中已經存在了一個hello的值,當咱們發送的數據發生改變的時候,這時候由於過時時間還沒到,不會清除緩存的信息。 return HttpResponse('hellodsafnjsakfaskfg')
步驟I. 引入TemplateTag {% load cache %} 步驟II. 使用緩存 {% cache 5000 緩存key %} 緩存時間 5000秒 緩存內容 {% endcache %}
from django.core.cache import cache 設置:cache.set(鍵,值,有效時間) 獲取:cache.get(鍵) 刪除:cache.delete(鍵) 清空:cache.clear()