1. 程式人生 > >Memcached的原理分析與配置

Memcached的原理分析與配置

一、Why Memcached?

  • 高併發訪問資料庫的痛楚:死鎖!

  • 硬碟IO之痛:本機:AspNet:HttpRuntime.Cache

  • 多客戶端共享快取

  • Net+Memory>>IO

  • 讀寫效能完美 Redies:Mm,1S:讀取可以1W次。寫:10W

  • 超簡單叢集搭建Cluster

  • 開源Open Source

  • 沒有提供主從賦值功能,也沒提供容災等功能,所以所有的程式碼基本都只是考慮效能最佳

  • 學習成本非常低,入門非常容易

  • 豐富的成功的案例

二、軟體從單機到分散式

1、 走向分散式第一步就是解決:多臺機器共享登陸資訊的問題。

  例如:現在有3臺機器組成了一個Web應用叢集,其中一臺機器登陸,然後其他另外兩臺機器共享登陸狀態?

  • 方案一:AspNet 程序外的Session

  • 方案二:用資料庫儲存當前登入狀態

  • 方案三:Memcache【效能最好,類似的:Redis,NoSql】

三、Memcache基礎原理

  • Socket 伺服器端

  • 資料:鍵值對儲存

  • 記憶體處理的演算法:

    • 本質就是一個大的雜湊表。key最大長度255長度

    • 記憶體模型:Memcache預先將可支配的記憶體空間進行分割槽(Slab),每個分割槽裡再分成多個塊(Chunk)最大1MB,但同一個分割槽裡:塊的長度(bytes)是固定的。

    • 插入資料,查詢適合自己長度的塊,然後插入,會有記憶體浪費。

    • LRU閒置>過期>最小訪問

    • 惰性刪除:它並沒有提供監控資料過期的限制,而是惰性的,當查到某個key資料時,如果過期那麼直接拋棄。

  • 叢集搭建原理

    • Memcache伺服器端並沒有提供叢集功能,但是通過客戶端的驅動程式實現了叢集配置。

    • 客戶端實現叢集的原理:首先客戶端配置多臺叢集機器的ip和埠的列表。然後客戶端驅動程式在寫入之前,首先對key做雜湊處理得到雜湊值後對總的機器個數進行取餘然後就選擇餘數對應的機器。

Memcache原理圖:

 

四、Windows下使用Memcache

  • 下載Memcache:https://www.runoob.com/memcached/window-install-memcached.html

   • 將服務程式拷貝到一個磁碟上的目錄

  • 安裝服務:cmd->Memcached.exe -d install 開啟服務監控視窗可以檢視服務是否啟動(注:Win10安裝過程中64位1.4.5報錯,換成64位1.4.4沒報錯,具體什麼原因網上也沒有詳細介紹)

  • 啟動服務:cmd->Memcached.exe -d start (restart重啟、stop關閉、start啟動)

  • 檢查服務是否啟動:連線到Memcache控制檯:telnet ServerIp 11211 輸入命令:stats檢查當前服務狀態

  • 解除安裝服務:Memcached.exe -d uninstall

安裝:

 

服務安裝完成:

啟動服務:在memcached上右鍵->啟動

連線Memcache:

注:安裝前確保本機電腦上已安裝telnet服務

控制面板->程式->啟動或關閉Windows功能

連線成功(黑丫丫的一片):

輸入第一個命令:stats

 

引數值

SET(既可以修改,也可以新增,不存在則新增,反之也成立)

1 格式:set key flags exptime bytes [noreply] value
2 其中的含義如下:
3   key:鍵值 key-value 結構中的 key,用於查詢快取值。
4   flags:可以包括鍵值對的整型引數,客戶機使用它儲存關於鍵值對的額外資訊 。
5   exptime:在快取中儲存鍵值對的時間長度(以秒為單位,0 表示永遠)
6   bytes:在快取中儲存的位元組數
7   noreply(可選): 該引數告知伺服器不需要返回資料
8   value:儲存的值(始終位於第二行)(可直接理解為key-value結構中的value)

GET(獲得)

1 格式: get 鍵

DELETE(刪除)

1  格式:delete 鍵

 有不懂的地方,下方留言,覺得對你有幫助的話,幫忙推薦一下,謝謝!明天繼續更新.Net如何操作Memc