日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django緩存Cache使用詳解

瀏覽:9日期:2024-09-16 14:31:50

緩存(Cache)對于創建一個高性能的網站和提升用戶體驗來說是非常重要的,然而對我們這種只用得起拼多多的碼農而言最重要的是學會如何使用緩存。今天我們就來看看緩存Cache應用場景及工作原理吧,并詳細介紹如何在Django中設置Cache并使用它們。

什么是緩存Cache

緩存是一類可以更快的讀取數據的介質統稱,也指其它可以加快數據讀取的存儲方式。一般用來存儲臨時數據,常用介質的是讀取速度很快的內存。一般來說從數據庫多次把所需要的數據提取出來,要比從內存或者硬盤等一次讀出來付出的成本大很多。對于中大型網站而言,使用緩存減少對數據庫的訪問次數是提升網站性能的關鍵之一。

為什么要使用緩存Cache

在Django中,當用戶請求到達視圖后,視圖會先從數據庫提取數據放到模板中進行動態渲染,渲染后的結果就是用戶看到的網頁。如果用戶每次請求都從數據庫提取數據并渲染,將極大降低性能,不僅服務器壓力大,而且客戶端也無法即時獲得響應。如果能將渲染后的結果放到速度更快的緩存中,每次有請求過來,先檢查緩存中是否有對應的資源,如果有,直接從緩存中取出來返回響應,節省取數據和渲染的時間,不僅能大大提高系統性能,還能提高用戶體驗。

我們來看一個實際的博客例子。每次當我們訪問首頁時,下面視圖都會從數據庫中提取文章列表,并渲染的模板里去。大多數情況下,我們的博客不會更新得那么頻繁,所以文章列表是不變的。這樣用戶在一定時間內多次訪問首頁時都從數據庫重新讀取同樣的數據是一種很大的浪費。

from django.shortcuts import render def index(request): # 讀取數據庫等并渲染到網頁 article_list = Article.objects.all() return render(request, ’index.html’, {’article_list’: article_list})

使用緩存Cache就可以幫我們解決這個問題。當用戶首次訪問博客首頁時,我們從數據庫中提取文章列表,并將其存儲到緩存里(常用的是內存,這取決于你的設置)。當用戶在單位時間內再次訪問首頁時, Django先檢查緩存是否過期(本例是15分鐘), 再檢查緩存里文章列表資源是否存在,如果存在,直接從緩存中讀取數據, 并渲染模板。

from django.shortcuts import renderfrom django.views.decorators.cache import cache_page @cache_page(60 * 15) # 秒數,這里指緩存 15 分鐘def index(request): article_list = Article.objects.all() return render(request, ’index.html’, {’article_list’: article_list})

注意: 在Django中使用緩存前,我們必需先做必要的設置。

緩存Cache的應用場景

緩存主要適用于對頁面實時性要求不高的頁面。存放在緩存的數據,通常是頻繁訪問的,而不會經常修改的數據。我們來舉幾個應用例子:

博客文章。假設用戶一天更新一篇文章,那么可以為博客設置1天的緩存,一天后會刷新。 購物網站。商品的描述信息幾乎不會變化,而商品的購買數量需要根據用戶情況實時更新。我們可以只選擇緩存商品描述信息。 緩存網頁片段。比如緩存網頁導航菜單和腳部(Footer)。

Django緩存設置

Django中提供了多種緩存方式,如果要使用緩存,需要先在settings.py中進行配置,然后應用。根據緩存介質的不同,你需要設置不同的緩存后臺Backend。

Memcached緩存

Memcached是基于內存的緩存,Django原生支持的最快最有效的緩存系統。對于大多數場景,我們推薦使用Memcached,數據緩存在服務器端。使用前需要通過pip安裝memcached的插件python-memcached和pylibmc,可以同時支持多個服務器上面的memcached。

下面是使用pyhon-memcached的設置。

# localhostCACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.memcached.MemcachedCache’, ’LOCATION’: ’127.0.0.1:11211’, }} # unix soketCACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.memcached.MemcachedCache’, ’LOCATION’: ’unix:/tmp/memcached.sock’, }} CACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.memcached.MemcachedCache’, ’LOCATION’: [ ’172.19.26.240:11211’, ’172.19.26.242:11211’, ] # 我們也可以給緩存機器加權重,權重高的承擔更多的請求,如下 ’LOCATION’: [ (’172.19.26.240:11211’,5), (’172.19.26.242:11211’,1), ] } }

數據庫緩存

CACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.db.DatabaseCache’, ’LOCATION’: ’my_cache_table’, }

文件系統緩存

CACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.filebased.FileBasedCache’, ’LOCATION’: ’/var/tmp/django_cache’,#這個是文件夾的路徑 #’LOCATION’: ’c:foobar’,#windows下的示例 }}

本地內存緩存

CACHES = { ’default’: { ’BACKEND’: ’django.core.cache.backends.locmem.LocMemCache’, ’LOCATION’: ’unique-snowflake’ }}

Django代碼中如何使用Cache

當你做好Cache的設置后,在代碼中你可以有三種方式使用Cache。

在視圖View中使用 在路由URLConf中使用 在模板中使用

在視圖View中使用cache

from django.views.decorators.cache import cache_page @cache_page(60 * 15)def my_view(request): ...

在路由URLConf中使用cache

這是小編我更喜歡的方式,這樣你就不用修改負責邏輯部分的view了。

from django.views.decorators.cache import cache_page urlpatterns = [ path(’foo/<int:code>/’, cache_page(60 * 15)(my_view)),]

在模板中使用cache

{% load cache %}{% cache 500 sidebar request.user.username %} .. sidebar for logged in user ..{% endcache %}

對于大部分碼農而言,我們只需要懂得如何在django中使用cache即可,而不需要詳細了解django后臺工作原理,比如Django是如何將數據存儲到選定介質的以及django是如何判斷緩存是否已經過期的。

Django中使用Cache的高級技巧

下面我來介紹下Django中使用cache的一些高級技巧。

使用cache_control

通常用戶將會面對兩種緩存: 他或她自己的瀏覽器緩存(私有緩存)以及他或她的提供者緩存(公共緩存)。 公共緩存由多個用戶使用,而受其它人的控制。 這就產生了你不想遇到的敏感數據的問題,比如說你的銀行賬號被存儲在公眾緩存中。 因此,Web 應用程序需要以某種方式告訴緩存那些數據是私有的,哪些是公共的。

解決方案是標示出某個頁面緩存應當是私有的。 要在 Django 中完成此項工作,可使用 cache_control 視圖修飾器:

from django.views.decorators.cache import cache_control @cache_control(private=True)def my_view(request):# ...

該修飾器負責在后臺發送相應的 HTTP 頭部。

還有一些其他方法可以控制緩存參數。 例如, HTTP 允許應用程序執行如下操作:

定義頁面可以被緩存的最大時間。 指定某個緩存是否總是檢查較新版本,僅當無更新時才傳遞所緩存內容。

在 Django 中,可使用 cache_control 視圖修飾器指定這些緩存參數。 在下例中, cache_control 告訴緩存對每次訪問都重新驗證緩存并在最長 3600 秒內保存所緩存版本。

from django.views.decorators.cache import cache_control @cache_control(must_revalidate=True, max_age=3600)def my_view(request):# ...

在 cache_control() 中,任何合法的Cache-Control HTTP 指令都是有效的。下面是完整列表:

public=True private=True no_cache=True no_transform=True must_revalidate=True proxy_revalidate=True max_age=num_seconds s_maxage=num_seconds

使用vary_on_headers

缺省情況下,Django 的緩存系統使用所請求的路徑(如blog/article/1)來創建其緩存鍵。這意味著不同用戶請求同樣路徑都會得到同樣的緩存版本,不考慮客戶端user-agent, cookie和語言配置的不同, 除非你使用Vary頭部通知緩存機制需要考慮請求頭里的cookie和語言的不同。

要在 Django 完成這項工作,可使用便利的 vary_on_headers 視圖裝飾器。例如下面代碼告訴Django讀取緩存數據時需要同時考慮User-Agent和Cookie的不同。

from django.views.decorators.vary import vary_on_headers @vary_on_headers(’User-Agent’, ’Cookie’)def my_view(request): ...

使用never_cache禁用緩存

如果你想用頭部完全禁掉緩存, 你可以使用django.views.decorators.cache.never_cache裝飾器。如果你不在視圖中使用緩存,服務器端是肯定不會緩存的,然而用戶的客戶端如瀏覽器還是會緩存一些數據,這時你可以使用never_cache禁用掉客戶端的緩存。

from django.views.decorators.cache import never_cache @never_cachedef myview(request):# ...

到此這篇關于Django緩存Cache使用詳解的文章就介紹到這了,更多相關Django緩存Cache內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品激情| 99久久99视频只有精品| 日韩国产欧美一区二区| 久久久免费人体| 国产日产一区| 精品日本视频| 国产亚洲一区二区手机在线观看 | 午夜亚洲福利| 日本午夜精品久久久| 亚洲欧美日韩国产一区| 中文一区一区三区免费在线观| 久久亚洲图片| 国产午夜精品一区在线观看| 欧美日韩视频免费看| 国产日韩亚洲| 日韩毛片在线| 日本大胆欧美人术艺术动态| 婷婷综合福利| 国产精品一区三区在线观看| 中文字幕免费精品| 精品国产精品国产偷麻豆| 精品国产亚洲一区二区三区大结局| 精品中文在线| 日韩免费看片| 国产日韩专区| 亚洲专区欧美专区| 免费人成黄页网站在线一区二区 | 成人午夜精品| 男人的天堂久久精品| 国产福利资源一区| 亚洲国产影院| 国产精品亚洲一区二区在线观看| 久久久久久黄| 国产福利亚洲| 五月激激激综合网色播| 精精国产xxxx视频在线播放| 亚洲三级av| 亚洲综合电影| 91麻豆精品| 老鸭窝毛片一区二区三区| а√天堂8资源中文在线| 天堂俺去俺来也www久久婷婷| 肉色欧美久久久久久久免费看| 日韩制服丝袜先锋影音| 中文字幕在线视频网站| 日韩欧美久久| 国产一区久久| 黄色在线观看www| 免费一区二区三区在线视频| 日本亚洲最大的色成网站www| 欧洲亚洲一区二区三区| 精品久久国产一区| 国产精品白丝av嫩草影院| 欧美亚洲精品在线| 桃色av一区二区| 粉嫩av一区二区三区四区五区 | 国产盗摄——sm在线视频| 国产日韩视频| 日本a口亚洲| 欧美一级一区| 日本va欧美va精品发布| 日韩动漫一区| 97精品资源在线观看| 日本aⅴ精品一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 蜜桃国内精品久久久久软件9| 久久99精品久久久野外观看| 国产精品对白| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 激情欧美一区二区三区| 国产综合精品| 欧美 日韩 国产一区二区在线视频 | 欧美日韩va| 精品视频99| 久久免费黄色| 亚洲永久字幕| 91午夜精品| 国产一区二区三区日韩精品| 97视频热人人精品免费| 日韩精品一卡| 亚洲人成高清| 精品少妇一区| aⅴ色国产欧美| 男女激情视频一区| 国产精品久久久久久久久久白浆| 精品在线网站观看| 激情综合网站| 久久狠狠亚洲综合| 日韩免费小视频| 日韩一区二区三区四区五区| 精品久久影院| 亚洲在线成人| 久久在线91| 男人天堂欧美日韩| 捆绑调教美女网站视频一区| 欧美日韩激情在线一区二区三区| 亚洲精品一二三**| 日本一区二区免费高清| 国产精品99一区二区| 久久av日韩| 免费在线观看一区二区三区| 卡一精品卡二卡三网站乱码| 亚洲五月婷婷| 精品中文字幕一区二区三区四区| 国产亚洲精品自拍| 日韩欧美在线中字| 欧美日韩一区自拍| 久久国产高清| 国产专区一区| 亚洲成人不卡| 国产日韩一区二区三区在线| 国产精品试看| 国产综合亚洲精品一区二| 九九久久国产| 欧美亚洲一级| 日韩在线视频一区二区三区| 欧美在线观看视频一区| 精品免费视频| 久久精品国产免费| 国产精品亚洲四区在线观看 | 国产精品亚洲综合在线观看| 人人精品人人爱| 欧美日韩国产一区二区三区不卡| 激情国产在线| 国产精品一区二区精品视频观看| 亚洲综合福利| 亚洲日本国产| 蜜臀久久久久久久| 另类激情亚洲| 综合国产视频| 日韩欧美中文字幕一区二区三区 | 蜜臀a∨国产成人精品| 香蕉久久国产| 免费日本视频一区| 一级欧美视频| 97久久中文字幕| 青青草伊人久久| 国产伦一区二区三区| 国产精品毛片视频| 精品三级久久久| 视频小说一区二区| 亚洲一区日本| 欧美欧美黄在线二区| 麻豆精品久久久| 桃色一区二区| 免费看精品久久片| 日韩福利视频导航| 欧美精品不卡| 亚洲作爱视频| 国产精品97| 日韩av中文字幕一区二区三区| 日韩精品dvd| 99热精品久久| 亚洲另类黄色| 精品视频一区二区三区在线观看 | 日韩在线卡一卡二| 日本在线不卡视频| 四虎国产精品免费观看| 国产精品美女| 国产欧美日韩免费观看| 国产精品大片免费观看| 久久九九99| 欧美在线不卡| 免费不卡中文字幕在线| 青青草国产成人99久久| av一区在线| 国产精品红桃| 亚洲伊人精品酒店| 日韩av在线中文字幕| 日韩av午夜在线观看| 日韩在线精品| 国产日韩视频在线| 亚洲男女av一区二区| 精品国产欧美| 日韩精品亚洲专区在线观看| 国内精品亚洲| 国产麻豆精品| 日韩黄色av| 亚洲欧美久久久| 久久一区二区三区电影| 97欧美在线视频| 国产伊人久久| 国产成人精品一区二区三区免费| 日韩欧美高清一区二区三区| 亚洲男女av一区二区| 免费视频一区三区| 性欧美xxxx免费岛国不卡电影| 国内不卡的一区二区三区中文字幕| 天堂va欧美ⅴa亚洲va一国产| 99精品99| 亚洲手机视频| 久久一区二区三区电影| 欧美精品资源| 久久蜜桃资源一区二区老牛| 国产精品xx| 日韩av二区| 久久久夜精品| 精品一区欧美| 亚洲深夜av| 日韩avvvv在线播放|