摘要:自帶了一個健壯的緩存系統來保存動態頁面,避免每次請求都重新計算。緩存中的和方法是很常見的。盡量放在第一個繼承的類設置過期時間根據自己需求加緩存。目前這個緩存使用的是內存。
概述:對于中等流量的網站來說,盡可能的減少開銷是非常必要的。緩存數據就是為了保存那些需要很多計算資源的結果,這樣的話就不必在下次重復消耗計算資源。獲取數據的數據的時候就是去緩存中拿,拿到了直接返回,沒拿到就去數據庫中查詢,篩選,然后緩存到數據庫, 然后返回給模板。
Django自帶了一個健壯的緩存系統來保存動態頁面,避免每次請求都重新計算。
Django提供了不同級別的緩存策略,可以緩存特定的視圖的輸出、可以僅僅緩存那些很難計算出來的部分、或者緩存整個網站
目的:優化數據結構;優化了對數據的查詢;篩選,過濾;減少了對磁盤的IO
官方文檔:https://docs.djangoproject.co...
設置緩存通過設置決定把數據緩存在哪里,是數據庫中、文件系統中還是內存中
默認緩存(內存)CACHES={ "default":{ "BACKEND":"django.core.cache.backends.locmem.LocMemCache", "LOCATION": "unique-snowflake", "TIMEOUT":60 } }
參數TIMEOUT:緩存的默認過期時間,以秒為單位
默認為300秒
設置為None,表示永不過期
設置為0造成緩存立即失效
文件緩存CACHES = { "default": { "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", "LOCATION": "c:/foo/bar", "TIMEOUT":300, } }數據庫緩存
CACHES = { "default": { "BACKEND": "django.core.cache.backends.db.DatabaseCache", "LOCATION": "my_cache_table", "TIMEOUT": "60", "KEY_PREFIX": "bbs", "VERSION": "1", "OPTIONS": { "MAX_ENTRIES": "300" } } }
創建緩存表:?python manage.py createcachetable
drf的緩存https://github.com/chibisov/drf-extensions
這是drf的一個擴展,不止增強了緩存還有其他的。
pip install drf-extensions
緩存viewset中的retrieve和list 方法是很常見的。這就是為什么CacheResponseMixin存在。
獲取數據的才會用到cache
from rest_framework_extensions.cache.mixins import CacheResponseMixin
把這個CacheResponseMixin,放在list之前。盡量放在第一個繼承的類
class GoodsListViewSet(CacheResponseMixin,mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):設置過期時間
REST_FRAMEWORK_EXTENSIONS = { "DEFAULT_CACHE_RESPONSE_TIMEOUT": 5 }
根據自己需求加緩存。目前這個緩存使用的是內存。每次系統重啟會丟失。
redis緩存官網:?http://django-redis-chs.readt...
redis操作文檔:http://redisdoc.com
默認使用redis中的1數據庫,但可以指定使用哪個db
安裝pip install django-redis
配置# ---配置Session和Cache--- CACHES={ "default":{ "BACKEND": "django_redis.cache.RedisCache", "LOCATION":"127.0.0.1:6379/12", # 指定db12 "TIMEOUT":60, "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", # 指定連接Redis的客戶端類 # "PASSWORD": "mysecret", # "SOCKET_CONNECT_TIMEOUT": 5, # in seconds # "SOCKET_TIMEOUT": 5, # in seconds # "CONNECTION_POOL_KWARGS": {"max_connections": 100}, # "CONNECTION_POOL_CLASS": "myproj.mypool.MyOwnPool", } } } SESSION_ENGINE = "django.contrib.sessions.backends.cache" # --結束Session和Cache配置
參數 | 解釋 |
---|---|
SOCKET_CONNECT_TIMEOUT | socket 建立連接超時設置 |
SOCKET_TIMEOUT | 連接建立后的讀寫操作超時設置 |
CONNECTION_POOL_KWARGS | 設置連接池的最大連接數量 |
CONNECTION_POOL_CLASS | 自己的連接池子類 |
django-redis 使用 redis-py 的連接池接口, 并提供了簡單的配置方式. 除此之外, 你可以為 backend 定制化連接池的產生。redis-py 默認不會關閉連接, 盡可能重用連接。
連接池概念
為什么使用連接池?首先Redis也是一種數據庫,它基于C/S模式,因此如果需要使用必須建立連接,稍微熟悉網絡的人應該都清楚地知道為什么需要建立連接,C/S模式本身就是一種遠程通信的交互模式,因此Redis服務器可以多帶帶作為一個數據庫服務器來獨立存在。假設Redis服務器與客戶端分處在異地,雖然基于內存的Redis數據庫有著超高的性能,但是底層的網絡通信卻占用了一次數據請求的大量時間,因為每次數據交互都需要先建立連接,假設一次數據交互總共用時30ms,超高性能的Redis數據庫處理數據所花的時間可能不到1ms,也即是說前期的連接占用了29ms,連接池則可以實現在客戶端建立多個鏈接并且不釋放,當需要使用連接的時候通過一定的算法獲取已經建立的連接,使用完了以后則還給連接池,這就免去了數據庫連接所占用的時間。
配置默認連接池
配置默認連接池很簡單, 你只需要在?CACHES?中使用?CONNECTION_POOL_KWARGS?設置連接池的最大連接數量即可
你可以得知連接池已經打開多少連接:
from django.core.cache import get_cache from django_redis import get_redis_connection r = get_redis_connection("default") # Use the name you have defined for Redis in settings.CACHES connection_pool = r.connection_pool print("Created connections so far: %d" % connection_pool._created_connections)
使用自己的連接池子類
有時你想使用自己的連接池子類. django-redis 提供了?CONNECTION_POOL_CLASS?來配置連接池子類
myproj/mypool.py
from redis.connection import ConnectionPool class MyOwnPool(ConnectionPool): # Just doing nothing, only for example purpose pass緩存的用法 單個view緩存
django.views.decorators.cache.cache_page裝飾器用于對視圖的輸出進行緩存
from django.views.decorators.cache import cache_page @cache_page(60 * 2) def index(request): # return HttpResponse("sunck is a good man") return HttpResponse("sunck is a nice man")
參數: timeout : 有效時長 # we"ve written it as 60 * 15 for the purpose of readability cache: 緩存到哪一個庫中;很少使用;針對于系統配置了多個緩存 如: @cache_page(timeout=60, cache="filecache") key_prefix: 前綴模板片段緩存
cache標簽: 參數
緩存時間,以秒為單位
給緩存片段起名字
{#{% load static from staticfiles %}#} {% load static %} {% load cache %}原生cache主頁 {# #}sunck is a nice man
{% cache 120 sunck %}nice man
{% endcache %}
from django.core.cache import cache 查看所有緩存的key: cache.keys("*") 設置:cache.set(鍵, 值, 有效時間) 獲取:cache.get(鍵) 刪除:cache.delete(鍵) 清空:cache.clear() >>> cache.set_many({"a": 1, "b": 2, "c": 3}) >>> cache.getmany(["a","b","c"]) {"a": 1, "b": 2, "c": 3} cache.delete_pattern("foo_*") # 全局通配符
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/62038.html
摘要:緩存數據就是為了保存那些需要很多計算資源的結果,這樣的話就不必在下次重復消耗計算資源。自帶了一個健壯的緩存系統來保存動態頁面,避免每次請求都重新計算。默認不會關閉連接盡可能重用連接。 發送郵件 概述:Django中內置了郵件發送功能,發送郵件需要使用SMTP服務,常用的免費服務器有:163、126、QQ 注冊并登陸163郵箱 打開POP3/SMTP服務與IMAP/SMTP服務 重置授...
摘要:官方緩存系統介紹配置方式及內部實現機制中大體分為三種,即針對全站的緩存配置針對視圖的緩存配置針對數據的緩存配置。本站采用數據庫全站緩存。每個頁面應該被緩存的秒數重啟就可以體驗緩存了。 最近博客增加了許多新功能,訪問速度有所下降,在國內某搜索引擎上查找的時候看到了這篇文字,簡單明了,所以轉發過來,雖不是原創但是希望能夠幫助更多的朋友。 Django 官方緩存系統介紹: https://d...
摘要:概述作用視圖接收請求并返回響應方法就是在視圖里使用函數處理請求。 概述 作用:視圖接收WEB請求并返回WEB響應方法:1. FBV(function base views)?就是在視圖里使用函數處理請求。 ? 2. CBV(class base views)?就是在視圖里使用類處理請求。 響應: 可以是一個HTML頁面,一個重定向,一個404錯誤、一個...
有了memcached做緩存,django的速度就像飛起來了 安裝 sudo apt-get install memcached pip install python-memcached sudo apt-get install python-dev sudo apt-get install libmemcached-dev pip install pylibmc 配置 CACHES = { ...
閱讀 3891·2021-11-22 13:54
閱讀 2669·2021-09-30 09:48
閱讀 2353·2021-09-28 09:36
閱讀 3104·2021-09-22 15:26
閱讀 1334·2019-08-30 15:55
閱讀 2505·2019-08-30 15:54
閱讀 1419·2019-08-30 14:17
閱讀 2335·2019-08-28 18:25