在動態**中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.
當乙個**的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.
快取是將一些常用的資料儲存記憶體或者memcache中,在一定的時間內有人來訪問這些資料時,則不再去執行資料庫及渲染等操作,而是直接從記憶體或memcache的快取中去取得資料,然後返回給使用者.
經常使用的有檔案快取和mencache快取
開發除錯(此模式為開發除錯使用,實際上不執行任何操作)
settings.py檔案配置
caches = , }}
記憶體快取(將快取內容儲存至記憶體區域中)
settings.py檔案配置
caches = }}
settings.py檔案配置
# -以檔案快取為例
caches = }}
資料庫快取(把快取資料儲存在資料庫中)
settings.py檔案配置
caches = } }
注意,建立快取的資料庫表使用的語句:
python manage.py createcachetable
memcache快取(使用python-memcached模組連線memcache)
settings.py檔案配置
caches = }}
location也可以配置成如下:
'location': 'unix:/tmp/memcached.sock', # 指定區域網內的主機名加socket套接字為memcache快取伺服器
'location': [ # 指定一台或多台其他主機ip位址加埠為memcache快取伺服器
'192.168.10.100:11211',
'192.168.10.101:11211',
'192.168.10.102:11211',
]
memcache快取(使用pylibmc模組連線memcache)
settings.py檔案配置
caches = , } }
location也可以配置成如下:
'location': '/tmp/memcached.sock', # 指定某個路徑為快取目錄
'location': [ # 分布式快取,在多台伺服器上執行memcached程序,程式會把多台伺服器當作乙個單獨的快取,而不會在每台伺服器上覆制快取值
'192.168.10.100:11211',
'192.168.10.101:11211',
'192.168.10.102:11211',
]
memcached是基於記憶體的快取,資料儲存在記憶體中.所以如果伺服器宕機的話,資料就會丟失,所以memcached一般與其他快取配合使用
django提供了不同粒度的快取,可以快取某個頁面,可以只快取乙個頁面的某個部分,甚至可以快取整個**.
單頁面快取
快取前 ,每次重新整理頁面時間都會變
import time
from django.views.decorators.cache import cache_page
@cache_page(5) # 數字是過期的時間 單位 秒
增加快取後,5秒之後才會變
頁面中某個位置快取(區域性快取)
# 檢視函式不再加裝飾器
def book(request):
ctime = time.time()
return render(request, 'time.html', locals())
# html頁面
當前時間是:}
整站快取(兩個中介軟體)
# 在setting中配置
'django.middleware.cache.updatecachemiddleware', # 放第一,重寫了process_response
'。。。',
'django.middleware.cache.fetchfromcachemiddleware', # 放最後,重寫了process_requset
# 快取過期時間
cache_middleware_seconds=5 # 秒 為單位
查出一堆json格式資料,鍊錶查了8個表
前後端分離以後
具體使用
from rest_framework.views import apiview
from django.core.cache import cache
from rest_framework.response import response
class booklist(apiview):
def get(self, request):
res = cache.get('book_list_dic') # 請求來了先判斷快取是否有值
if res:
print('我走快取') # 有值,直接返回快取資料
return response(res)
else:
book_list = models.book.objects.all()
ser = serialzer.bookserializer(book_list, many=true)
cache.set('book_list_dic', ser.data, 6) # 沒有值,將資料返回並存到cache檔案中
print('我沒有走快取')
return response(ser.data)
cache可以快取所有資料型別,包括自定義的類(使用pickle) django 重新整理快取 Django 中的快取問題
django 中的快取問題 簡單介紹 在動態 中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.當乙個 的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.快取是將一些常用...
django開發中利用 快取檔案 進行頁面快取
首先我們先來了解下瀏覽器的快取 瀏覽器快取機制 cache control策略 cache control與expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩訪問資料還是重新發請求到伺服器取資料。只不過cache control的選擇更多,設定更細緻,如果同時設定的話,...
django中的快取
快取的基本過程 1 給定乙個url,檢查頁面是否存在快取 2 如果存在,返回快取的頁面 3 如果不存在,生成該頁面,把生成的頁面儲存在快取中 django中,可以將某個檢視函式的輸出快取,也可以快取某個部分 使用快取,需要在setting.py中的caches配置,django預設使用本地的記憶體作...