memcached是乙個自由開源的,高效能,分布式記憶體物件快取系統。 memcached是一種基於記憶體的key-value儲存,用來儲存小塊的任意資料(字串、物件)。這些資料可以是資料庫呼叫、api呼叫或者是頁面渲染的結果。 memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大資料量快取的很多問題。它的api相容大部分流行的開發語言。 本質上,它是乙個簡潔的key-value儲存系統。 一般的使用目的,是通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web應用的速度、提高可擴充套件性。
memcached作為高速執行的分布式快取伺服器,具有以下的特點。
memcached的分布式部署極其簡單,通常較小的應用一台memcached伺服器就可以滿足需求,但是大中型專案可能就需要多台memcached伺服器了,這就牽涉到乙個分布式部署的問題。對於多台memcached伺服器,怎麼確定乙個資料應該儲存到哪台伺服器呢?有兩種方案,一是普通hash分布,二是一致性hash分布。普通hash分布對於memcached伺服器數量固定的情況推薦使用,比較簡單。但是當伺服器數量發生改變時,問題就出來了。因為同乙個key經hash演算法處理後,與伺服器數量取模,會導致結果與伺服器數量未變化時不同,這就導致之前儲存的資料丟失。採取一致性hash分布可以有效的解決這個問題,把丟失的資料減到最小(注意這裡並沒有說完全不丟失)。
下面通過乙個簡單的例項來說明memcached的高效能,以及memcached是如何工作的。資料來源採用的是隨機生成的1500萬條記錄,通過控制台程式來模擬使用者登入的業務邏輯,如果首次登入成功,則把使用者資訊寫入memcached快取中,再次登入時即可從快取中取得使用者資訊進行驗證。以下是詳細**過程:
資料操作介面:
1具體的登入業務操作:namespace
memcachedlibrary
210 }
1下面的**是在控制台呼叫的過程:public
class
sqldataoperator : idataoperator
225 ismemcachedfinished = true;26
}27memcachedwatch.stop();
28 debug.writeline("
memcached取得使用者資訊耗時:
" + memcachedwatch.elapsedmilliseconds + "毫秒"
);29
30//
如果memcached中已經快取user資訊,則無需到資料庫中檢索資料,提高效能
31if
(ismemcachedfinished)
3235
3637
//如果memcached中沒有快取過資料,則從資料庫中取得資料,並將結果快取到memcached
38 stopwatch databasewatch = new
stopwatch();
39databasewatch.start();
40 sqlconnection con =openconnection();
41string cmdsql = string.format("
select * from tb_emailinfo where email='' and classcode=''
", user.user, user.pass);
42using (sqlcommand cmd = new
sqlcommand(cmdsql, con))
4353}54
databasewatch.stop();
55 debug.writeline("
資料庫取得使用者資訊耗時:
" + databasewatch.elapsedmilliseconds + "毫秒"
);56}57
58public
sqlconnection openconnection()
5966 }
1最後的執行結果截圖如下:class
program221
}22 }
圖一
圖二
圖三
圖四本文的例項是將使用者資訊以字串的形式快取起來並提供檢索,其實也可以直接把userinfo實體物件快取到memcached中,取出來後進行轉化即可,前提是userinfo需要有序列化關鍵字serializable關鍵字。後面有時間在更新下memcached快取實體的例項。
Memcached最佳實踐
各種問題解決基本思路 1.防止多個memcached伺服器重複快取 儲存資訊時指定的鍵使用乙個統一的簡單的雜湊演算法 命名空間 id 應用伺服器的memcached伺服器列表配置相同。2.memcached伺服器不可用時 恢復原始的獲取資料方式 從資料庫查詢資料,保證應用伺服器正常執行,並嘗試向me...
Memcached原始碼解析
memcached是乙個非常有名的高效能分布式快取系統,採用memcached作為快取系統能顯著提高系統的效能。想要更好地發揮對memcached的效能,對其源 進行分析顯得非常必要。本文基於memcached 1.4.15進行源 分析,假設讀者對socket,管道,多執行緒程式設計,hash演算法...
linux下memcached單例項 多例項
關於memcached的單例項和多例項,我們不需要像mysql一樣配置那麼麻煩,我們只需要再執行memcached的啟動命令啟動就可以再開啟多個memcahed例項了。不過需要注意的是,一定不能讓它們的埠相同!切記!下面是memcached單機多例項的啟動例項 root nolinux usr lo...