最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Python的Django框架中的Memcached

 更新時間:2015年07月23日 11:56:18   投稿:goldensun  
這篇文章主要介紹了淺析Python的Django框架中的緩存機制,其中著重講到了Memcached,需要的朋友可以參考下

動態(tài)網(wǎng)站的問題就在于它是動態(tài)的。 也就是說每次用戶訪問一個頁面,服務(wù)器要執(zhí)行數(shù)據(jù)庫查詢,啟動模板,執(zhí)行業(yè)務(wù)邏輯以及最終生成一個你所看到的網(wǎng)頁,這一切都是動態(tài)即時生成的。 從處理器資源的角度來看,這是比較昂貴的。

對于大多數(shù)網(wǎng)絡(luò)應(yīng)用來說,過載并不是大問題。 因為大多數(shù)網(wǎng)絡(luò)應(yīng)用并不是washingtonpost.com或Slashdot;它們通常是很小很簡單,或者是中等規(guī)模的站點,只有很少的流量。 但是對于中等至大規(guī)模流量的站點來說,盡可能地解決過載問題是非常必要的。

這就需要用到緩存了。

緩存的目的是為了避免重復(fù)計算,特別是對一些比較耗時間、資源的計算。 下面的偽代碼演示了如何對動態(tài)頁面的結(jié)果進行緩存。

given a URL, try finding that page in the cache
if the page is in the cache:
  return the cached page
else:
  generate the page
  save the generated page in the cache (for next time)
  return the generated page

為此,Django提供了一個穩(wěn)定的緩存系統(tǒng)讓你緩存動態(tài)頁面的結(jié)果,這樣在接下來有相同的請求就可以直接使用緩存中的數(shù)據(jù),避免不必要的重復(fù)計算。 另外Django還提供了不同粒度數(shù)據(jù)的緩存,例如: 你可以緩存整個頁面,也可以緩存某個部分,甚至緩存整個網(wǎng)站。

Django也和”上游”緩存工作的很好,例如Squid(http://www.squid-cache.org)和基于瀏覽器的緩存。 這些類型的緩存你不直接控制,但是你可以提供關(guān)于你的站點哪部分應(yīng)該被緩存和怎樣緩存的線索(通過HTTP頭部)給它們
設(shè)定緩存

緩存系統(tǒng)需要一些少量的設(shè)定工作。 也就是說,你必須告訴它緩存的數(shù)據(jù)應(yīng)該放在哪里,在數(shù)據(jù)庫中,在文件系統(tǒng),或直接在內(nèi)存中。 這是一個重要的決定,影響您的高速緩存的性能,是的,有些類型的緩存比其它類型快。

緩存設(shè)置在settings文件的 CACHE_BACKEND中。 這里是一個CACHE_BACKEND所有可用值的解釋。
內(nèi)存緩沖

Memcached是迄今為止可用于Django的最快,最有效的緩存類型,Memcached是完全基于內(nèi)存的緩存框架,最初開發(fā)它是用以處理高負荷的LiveJournal.com隨后由Danga Interactive公司開源。 它被用于一些站點,例如Facebook和維基百科網(wǎng)站,以減少數(shù)據(jù)庫訪問,并大幅提高站點的性能。

Memcached是免費的(http://danga.com/memcached)。它作為一個守護進程運行,并分配了特定數(shù)量的內(nèi)存。 它只是提供了添加,檢索和刪除緩存中的任意數(shù)據(jù)的高速接口。 所有數(shù)據(jù)都直接存儲在內(nèi)存中,所以沒有對使用的數(shù)據(jù)庫或文件系統(tǒng)的開銷。

在安裝了Memcached本身之后,你將需要安裝Memcached Python綁定,它沒有直接和Django綁定。 這兩個可用版本。 選擇和安裝以下模塊之一:

    最快的可用選項是一個模塊,稱為cmemcache,在http://gijsbert.org/cmemcache。

    如果您無法安裝cmemcache,您可以安裝python - Memcached,在ftp://ftp.tummy.com/pub/python-memcached/。如果該網(wǎng)址已不再有效,只要到Memcached的網(wǎng)站http://www.danga.com/memcached/),并從客戶端API完成Python綁定。

若要使用Memcached的Django,設(shè)置CACHE_BACKEND到memcached:/ / IP:port/,其中IP是Memcached的守護進程的IP地址,port是Memcached運行的端口。

在這個例子中,Memcached運行在本地主機 (127.0.0.1)上,端口為11211:

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

Memcached的一個極好的特性是它在多個服務(wù)器間分享緩存的能力。 這意味著您可以在多臺機器上運行Memcached的守護進程,該程序會把這些機器當成一個單一緩存,而無需重復(fù)每臺機器上的緩存值。 要充分利用此功能,請在CACHE_BACKEND里引入所有服務(wù)器的地址,用分號分隔。

這個例子中,緩存在運行在IP地址為172.19.26.240和172.19.26.242,端口號為11211的Memcached實例間分享:

CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'

這個例子中,緩存在運行在172.19.26.240(端口11211),172.19.26.242(端口11212),172.19.26.244(端口11213)的Memcached實例間分享:

CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/'

最后有關(guān)Memcached的一點是,基于內(nèi)存的緩存有一個重大的缺點。 由于緩存的數(shù)據(jù)存儲在內(nèi)存中,所以如果您的服務(wù)器崩潰,數(shù)據(jù)將會消失。 顯然,內(nèi)存不是用來持久化數(shù)據(jù)的,因此不要把基于內(nèi)存的緩存作為您唯一的存儲數(shù)據(jù)緩存。 毫無疑問,在Django的緩存后端不應(yīng)該用于持久化,它們本來就被設(shè)計成緩存的解決方案。但我們?nèi)匀恢赋龃它c,這里是因為基于內(nèi)存的緩存是暫時的。

相關(guān)文章

最新評論

洞口县| 吉水县| 古丈县| 南投市| 碌曲县| 子长县| 柳林县| 沾益县| 闽清县| 浦江县| 华容县| 滨州市| 德保县| 桑日县| 华容县| 鄂托克前旗| 扬中市| 正定县| 丁青县| 岳池县| 鄂伦春自治旗| 云龙县| 开平市| 延川县| 河池市| 岑溪市| 盐亭县| 香格里拉县| 巴彦淖尔市| 福建省| 延吉市| 封丘县| 武夷山市| 黄石市| 扶余县| 汶川县| 浏阳市| 建宁县| 丹阳市| 安阳市| 屯昌县|