django設定redis做為快取
阿新 • • 發佈:2021-12-16
快取
-
-
所謂的快取,實際上往往是把資料庫中資料提取出來,並臨時存放到一個第三方裝置/檔案中。
-
一般常見的快取儲存介質:記憶體(redis/memcached/mysql的記憶體表),硬碟檔案中,CDN(內容分發網路)
-
對於中等流量的網站來說,儘可能地減少開銷是必要的。快取資料就是為了儲存那些需要很多計算資源的結果,這樣的話就不必在下次重複消耗計算資源
-
Django自帶了一個健壯的快取系統來儲存動態頁面,避免對於每次請求都重新計算
-
Django提供了不同級別的快取粒度:可以快取特定檢視的輸出、可以僅僅快取那些很難生產出來的部分、或者可以快取整個網站
-
檢視快取
-
模板快取
-
快取API
-
設定快取
-
通過設定決定把資料快取在哪裡,是資料庫中、檔案系統還是在記憶體中
-
通過settings檔案的CACHES配置來實現
-
引數TIMEOUT:快取的預設過期時間,以秒為單位,這個引數預設是300秒,即5分鐘;設定TIMEOUT為None表示永遠不會過期,值設定成0造成快取立即失效
CACHES={
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT': 60,
}
}
-
可以將cache存到redis中,預設採用1號資料庫,此處我們暫時沒有學習到redis,但是學習的映象中已經預裝了redis了。
-
需要安裝包並配置如下:
安裝包:pip install django-redis-cache 或者 pip install django_redis
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache", # django-redis-cache
# "BACKEND": "django_redis.cache.RedisCache", # django_redis
"LOCATION": "redis://:@127.0.0.1:6379/1", # 資料來源格式連線寫法 mysql://賬號:密碼@IP:埠/資料庫名稱?
'TIMEOUT': 60, # 快取失效時間,這裡60秒只是為了測試而已
},
}
-
可以連線redis檢視存的資料
# 終端下連線redis,進行redis互動終端:
redis-cli
# 切換資料庫:
select 1
# 設定一個數據,儲存到指定變數名中 set 變數 值
set name xiaoming
# 檢視資料的變數(鍵/key):
keys *
# 獲取指定變數名的資料:
get 鍵
檢視快取
-
django.views.decorators.cache定義了cache_page裝飾器,用於對檢視的輸出進行快取
-
示例程式碼如下:
from django.views.decorators.cache import cache_page
# 函式檢視
-
cache_page接受一個引數:timeout,秒為單位,上例中快取了15分鐘
-
檢視快取與URL無關,如果多個URL指向同一檢視,每個URL將會分別快取
快取API
from django.core.cache import cache
設定:cache.set(鍵,值,有效時間)
獲取:cache.get(鍵)
刪除:cache.delete(鍵)
清空:cache.clear() # 慎用
檢視,程式碼:
from django.core.cache import cache
class CacheView(View):
def get(self,request):
# 通過快取api先查詢快取
student_list = cache.get("student_list")
if not student_list:
print("如果沒有快取,則到資料庫查詢")
student_list = Student.objects.all()
# 查詢完成建立快取 過期時間 為60秒
cache.set("student_list", student_list, 60)
print(student_list)
return HttpResponse("ok")
urls.py,程式碼:
path("cache", views.CacheView.as_view()),