Django 緩存配置Redis使用詳解
一、cache介紹
由于Django是動態(tài)網(wǎng)站,所有每次請求均會去數(shù)據(jù)進行相應的操作,當程序訪問量大時,耗時必然會更加明顯,最簡單解決方式是使用:緩存。
緩存工作原理:緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時間內(nèi)有用戶來訪問這些數(shù)據(jù)時,則不再去執(zhí)行數(shù)據(jù)庫及渲染等操作,而是直接從內(nèi)存或memcache的緩存中去取得數(shù)據(jù),然后返回給用戶。
Django提供了6種緩存方式:
- 開發(fā)調(diào)試緩存
- 內(nèi)存緩存
- 文件緩存
- 數(shù)據(jù)庫緩存
- Memcache緩存(使用python-memcached模塊)
- Memcache緩存(使用pylibmc模塊)
這里不多介紹,有興趣的可以去看看官方文檔:https://docs.djangoproject.com/en/dev/topics/cache/
二、Redis緩存
要想在Django配置Redis緩存,則需要先安裝依賴:
pip3 install django-redis
settings.py配置:
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", } } }
視圖中連接(手動操作redis):
from django.shortcuts import HttpResponse from django_redis import get_redis_connection def index(request): r = get_redis_connection("default") r.hmset("name_a", {"key_a": "value_a", "key_b": "value_b"}) return HttpResponse("設置redis") def order(request): r = get_redis_connection("default") val = r.hmget("name_a", ["key_a", "key_b"]) print(val) # [b'value_a', b'value_b'] return HttpResponse("獲取redis")
三、應用
全站使用緩存
使用中間件,經(jīng)過一系列的認證等操作,如果內(nèi)容在緩存中存在,則使用 FetchFromCacheMiddleware 獲取內(nèi)容并返回給用戶,當返回給用戶之前,判斷緩存中是否已經(jīng)存在,如果不存在則UpdateCacheMiddleware 會將緩存保存至緩存,從而實現(xiàn)全站緩存。
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', # 放在第一 # 其他中間件... 'django.middleware.cache.FetchFromCacheMiddleware', # 放在最后 ] CACHE_MIDDLEWARE_ALIAS = "" # 用于存儲的緩存別名 CACHE_MIDDLEWARE_SECONDS = 600 # 每個頁面應緩存的秒數(shù) CACHE_MIDDLEWARE_KEY_PREFIX = "" # 如果使用相同的Django安裝在多個站點之間共享緩存,請將其設置為站點名稱或此Django實例特有的其他字符串,以防止發(fā)生密鑰沖突。如果你不在乎,請使用空字符串。
測試
from django.shortcuts import HttpResponseimport time def index(request): t = time.time() return HttpResponse("時間:{}".format(str(t))) def home(request): t = time.time() return HttpResponse("時間:{}".format(str(t)))
可以發(fā)現(xiàn),index或者home頁面第一次返回的時間是多少,往后10分鐘以內(nèi),時間都是不變的。
單獨視圖緩存(記得取消全站緩存中間件配置)
from django.shortcuts import HttpResponse from django.views.decorators.cache import cache_page import time @cache_page(60 * 10) def index(request): t = time.time() return HttpResponse("時間:{}".format(str(t))) def home(request): t = time.time() return HttpResponse("時間:{}".format(str(t)))
這次,index頁面第一次訪問返回的時間需要過10分鐘再次訪問才能變化,而home頁面返回的時間是時時刻刻變化的。
模板局部視圖使用
# 1.引入TemplateTag {% load cache %} # 2.使用緩存 {% cache 600 name %} # 緩存超時(秒) 和 緩存片段的名稱(名稱按原樣使用) 緩存內(nèi)容 {% endcache %}
示例:
# views.py from django.shortcuts import render import time def index(request): t = time.time() return render(request, "index.html", {"t": t})
# index.html <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% load cache %} {% cache 10 current_time %} <h1>{{ t }}</h1> {% endcache %} </body> </html>
四、使用場景說明
# 一般來說我們用 Django 來搭建一個網(wǎng)站,要用到數(shù)據(jù)庫等。 from django.shortcuts import render def index(request): # 讀取數(shù)據(jù)庫等 并渲染到網(wǎng)頁 # 數(shù)據(jù)庫獲取的結果保存到 queryset 中 return render(request, 'index.html', {'queryset':queryset}) # 像這樣每次訪問都要讀取數(shù)據(jù)庫,一般的小網(wǎng)站沒什么問題,當訪問量非常大的時候, 就會有很多次的數(shù)據(jù)庫查詢,肯定會造成訪問速度變慢,服務器資源占用較多等問題。 #-------------------------------------------------------------------- from django.shortcuts import render from django.views.decorators.cache import cache_page @cache_page(60 * 10) # 秒數(shù),這里指緩存10分鐘,不直接寫600是為了提高可讀性 def index(request): # 讀取數(shù)據(jù)庫等 并渲染到網(wǎng)頁 return render(request, 'index.html', {'queryset':queryset}) # 當使用了cache后,訪問情況變成了如下:訪問一個網(wǎng)址時, 嘗試從 cache 中找有沒有 緩存內(nèi)容,如果需要的數(shù)據(jù)在緩存中沒有緩存內(nèi)容,則去數(shù)據(jù)庫取,渲染返回頁面,同時 將這些數(shù)據(jù)保存在緩存中,在一定時間內(nèi),當用戶再次訪問頁面時,就沒必要去數(shù)據(jù)庫取 了,直接從緩存中拿到數(shù)據(jù)。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python學習筆記基本數(shù)據(jù)結構之序列類型list tuple range用法分析
這篇文章主要介紹了Python學習筆記基本數(shù)據(jù)結構之序列類型list tuple range用法,結合具體實例形式分析了Python序列類型list tuple range基本概念、定義與使用技巧,需要的朋友可以參考下2019-06-06使用Python快速提取PPT中的文本內(nèi)容的代碼示例
本文將介紹如何使用Python程序提取PowerPoint演示文稿中的文本內(nèi)容,包括幻燈片中的主體文本、幻燈片備注文本以及幻燈片,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03在pytorch 中計算精度、回歸率、F1 score等指標的實例
今天小編就為大家分享一篇在pytorch 中計算精度、回歸率、F1 score等指標的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01