一、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 鍵
有不懂的地方,下方留言,覺得對你有幫助的
精彩文章來源微信公眾號 java微技術