實踐 Memcached例項解析

2021-09-27 09:08:03 字數 2692 閱讀 8867

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...