周建儒
摘要: 緩存技術在web開發中應用廣泛,合理的緩存技術可以減輕服務器負擔,提升系統性能,尤其在大型網站建設中,使用Memcached緩存技術能夠有效地增強系統的緩存性能。在分析Memcached的原理與特征的基礎上,結合實際項目探討了Memcached在大型網站中如何應用。
關鍵詞: 大型網站;緩存技術;Memcached
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)01-0057-03
Memcached Used in the Construction of Large Sites
ZHOU Jian-ru
(Sichuan Information Technology College, Guangyuan 628040,China)
Abstract: Caching technology widely in web development application, reasonable caching technology can reduce server load, improve system performance, especially in large-scale construction site, using Memcached caching technology can effectively enhance the performance of the system cache. In the analysis of the principles and characteristics of Memcached on the basis of the actual project explores how Memcached applications in a large site.
Key words: Large sites; caching; Memcached
隨著現代互聯網技術的快速發展,應用系統的復雜度增大、數據量不斷增長、高并發請求增多,服務器的負擔也隨之加重,數據庫響應速度變慢,網頁顯示延遲等這些問題也越發突出。數據緩存技術成為解決這些問題的主要途徑。緩存技術已經成為一個并發訪問量大的應用系統不可缺少的關鍵技術,緩存方案設計的好壞直接關系到網站訪問的速度。目前,很多的大型網站都使用 Memcached來支持海量級的頁面訪問量。通過把 cache 層與Web 架構集成,可以提高應用程序的性能,并降低數據庫的負載。
1 Memcached簡介
Memcaehed是danga.com的一個項目,開發Memcaehed的目的是為了提高LiveJournal的訪問速度,以后逐漸被應用在大型網站建設中。
Memcached是一個免費開源的、高性能的、分布式的內存對象緩存系統,用于在動態 Web 應用中提升訪問速度[1],可以滿足不同主機上的多個用戶同時訪問該緩存系統。Memcached通過在內存中維護一個統一的hash表來管理緩存數據,它和數據庫是獨立的,用戶無需知道數據存在何處。Memcached可以存儲各種類型的數據(例如文件、視頻、圖像等),它不僅解決了共享內存只能是單機的弊端,同時也解決了數據庫檢索的壓力,最大的優點是提高了訪問獲取數據的速度[3]。
2 Memcached工作原理
Memcached技術是一個數據緩存的工具,常應用于Web應用中,主要目的是提升訪問速度,同時減輕數據庫負載。Memcached緩存技術是在內存中緩存數據和對象,客戶端應用可以直接從緩存中讀取數據,這樣就避免了頻繁讀取數據庫,從而提高網站的響應速度。Memcached緩存技術是基于一個存儲鍵-值對的hashmap,客戶端應用通過Memcached協議與守護進程通信。Memcached并不提供冗余,當某個服務器停止運行或崩潰了,所有存儲在該服務器上數據就消失了。Memcached工作原理如圖1所示,圖中細線箭頭表示首次訪問頁面時從RDBMS中取得數據保存到Memcached中,粗線箭頭表示第二次以后訪問頁面時從Memcached中取數據顯示[4]。
圖1 Memcached與數據庫協同工作原理
3 Memcached的主要特征
Memcached是一種分布式的用于數據緩存的服務器,它的特征如下。
(1) 內置的內存管理方式
為了提高性能,Memcached中保存的數據都存儲在它內置的內存存儲空間中,當存儲的數據量達到預設容量值之后,可以通過LRU淘汰算法,或者通過刪除和設置失效時間來自動刪除內存中的數據。Memcached本身是為緩存而設計的服務器,不能持久保存數據,由于數據僅存在于內存中,因此重啟服務器或者Memcached進程中止數據就會丟失。
(2) 分布式
Memcached服務器端沒有分布式的功能,僅有存儲功能,其分布式是由客戶端程序實現的[2]。Memcached服務器是獨立的存取數據的,多個服務器之間不會共享數據,也互不通信??梢栽诙嗯_服務器上安裝Memcached來組建一個緩存服務器集群,通過hash來分散存儲,存儲位置只與關鍵字相關,這樣就可以減輕數據庫的響應壓力,并且它具有故障測試,負載分配等功能。
4 Memcached的應用
Memcached作為緩存服務器,其應用場景主要是針對一些訪問量大的應用系統,比如電子商務網站,其網站首頁必定有一個商品分類導航欄,當點擊某個具體分類時,其網頁就加載該類別的商品。實現該功能,一般的做法就是執行SQL語句,查詢出全部的商品分類并顯示在頁面上,當訪問量很多的時候,每打開一次網頁,就要去執行一次SQL語句,這就增加了數據庫的連接數,當訪問量到達一定數量時,就很可能使數據庫崩潰,甚至讓系統癱瘓。在這種情況下,如果使用緩存技術,就可以有效避免這種事情的發生。因為商品分類作為導航欄是不會經常改變的,實時性不是很高,這樣我們就可以把商品分類放到緩存中。其解決方案為,加入Memcached緩存,首先第一次顯示的時候,判斷Memcached緩存中是否有該商品分類,如果沒有,執行一次SQL語句,從數據庫中查詢所有的商品分類,然后放到Memcached中,進入處理數據并顯示頁面。當第二次進行訪問時,Memcached緩存中就有了該商品分類的數據,就可以直接從Memcached中取出數據進行處理并顯示到頁面上,不需要再次執行SQL語句從數據庫中去讀取數據,這樣便減少了數據庫的連接和訪問時間。
Memcached的應用主要分為Memcached服務器端的安裝配置和客戶端使用。服務器端主要和應用服務器(比如:Tomcat)安裝在同一臺機器上,客戶端使用主要是程序代碼的調用和存儲。
4.1 服務器安裝
在此以Windows系統的服務器為例介紹Memcached的安裝。首先下載Memercached For Windows并解壓,然后直接運行 memcached.exe 或者用cmd打開命令窗口,轉到解壓文件所在的目錄,輸入命令memcached.exe -d install執行,結束后在控制面板中打開服務,可以看到Memcached了,如果沒有啟動就手動啟動。
4.2 客戶端應用
Memcached作為緩存工具,其客戶端程序可以使用多種開發語言來實現,針對Java而言,目前的實現就有三種方法,分別為Memcached Client for Java,SpyMemcached和XMemcached。Memcached Client for Java比SpyMemcached更穩定、更早、更廣泛。SpyMemcached比 Memcached Client for Java更高效。XMemcached比 SpyMemcache并發效果更好。所以對訪問量高的電子商務網站而言,采用并發效果好的XMemcached來實現客戶端是比較好的選擇。以下就以一個具體的項目為例進行說明,該項目是一個商業項目的demo,使用maven進行管理,采用struts2+spring+mabatis架構,將Memcached與spring進行了集成。該項目架構如圖2所示。
圖2 項目架構
首先通過maven將xmemcached-2.0.0.jar包導入項目,再將Memcached與spring集成,在spring配置文件中進行如下配置,核心代碼如下所示。
4.3 在業務層使用Memcached
Memcached 用于功能接口的定義,在業務層可以直接使用,可以屏蔽各種客戶端實現API之間的差異,從而實現業務系統與客戶端解耦合的目的,如果以后要換客戶端的實現,對業務系統不會有影響。核心代碼如下所示。
public String selectUser(HttpServletRequest request,Model model) throws TimeoutException, InterruptedException, MemcachedException{
Long tr = new Date().getTime();
Map param = new HashMap();
List
user = (List) memcachedClient.get("userList");
if(user == null) {
user = serviceManager.getUserManagerService().selectUser(param);
memcachedClient.set("userList", 0, user);
}
model.addAttribute("userList", user);
Long tq = new Date().getTime();
Long tp = tq - tr ;}
上述代碼在運行過程中,當加入緩存后,其信息展示的速度會有明顯的提升。
5 總結
Memcached在高并發的數據查詢系統中發揮良好的性能,因為訪問Memcached中的內存數據要比數據庫的磁盤數據快很多。
文中主要探討了Memcached主要特征以及在大型網站中如何應用。在網站建設中使用Memcached之后,可以減少數據庫連接、查詢等操作,降低了數據庫負載。系統的運行速度提高了,優化了網站的性能。
參考文獻:
[1] 郭棟,王偉.基于Memcached的緩存資源集中管理方法[J].計算機技術與發展,2013(12):62-65.
[2] 鄧磊,吳健.電子政務中跨域可信數據交換模型設計與實現[J].計算機工程,2007,33(12):4-6.
[3] 俞華鋒.Memcached在大型網站中的應用[J].科技信息,2008(1):70-71.
[4] 宗小忠.基于Memcached構建Web緩存服務器[J].電腦知識與技術,2011(5):104-105.