首先將memcache的bin目錄加入到Path環境變量中,方便後面使用命令:mysql
而後執行 memcached –dinstall 命令安裝memcache的服務:redis
而後去計算進的服務頁面能夠看到已成功安裝:sql
啓動memcache的後臺服務程序:數據庫
在後臺服務處看到memcache的後臺服務已啓動:windows
而後執行,telnet 127.0.0.111211來打開Telnet客戶端:緩存
結果發現沒有開啓Telnet的功能:安全
因而在「啓動或關閉Windows功能」處,開啓Telnet客戶端服務器
而後須要重啓電腦,使得更改生效。接着再次執行telnet 127.0.0.1 11211來打開Telnet客戶端,成功打開:網絡
測試是否可用,咱們再Telnet客戶端中打命令,stats,出現以下信息表示正常:多線程
而後咱們存一個數據而後取出來:
到此爲止,說明咱們的memcache已經成功安裝,並啓動。
隨着咱們從IT時代步入到DT時代,咱們的軟件架構也從單機到了集羣、分佈式。而,走向分佈式的第一步就須要解決多臺服務器共享登陸信息的問題。推而廣之,就是要解決多臺服務器共享公共信息的問題。
解決這個問題,咱們能夠將公共信息存儲到狀態服務器中,或者存儲到數據庫中,而後就是存儲到咱們的「分佈式緩存」中等等。因爲讀取緩存加上網絡傳輸的時間,要遠遠小於讀取數據庫(IO)的時間等,因此分佈式緩存是解決這個問題的很優的一種方案。
咱們全部的數據基本上都是保存在數據庫當中的,每次頻繁的存取數據庫,致使數據庫性能急劇降低,沒法同時服務更多的用戶,好比MySQL,特別頻繁的鎖表,那麼我就能夠Memcache來分擔數據庫的壓力,也就是說能夠作數據緩存,由於Memcache的讀寫性能能夠說極致的完美。
Memcache採用鍵值對存儲方式。它本質是一個大的 hash表,key的最大長度爲255個字符,最長過時時間爲30天。
它的內存模型以下:Memcache預先將可支配的內存空間進行分區(Slab),每一個分區裏再分爲多個塊(Chunk)最大1M,但同一個分區中塊的大小是固定的。而後,插入數據時,會根據數據大小尋找最合適的塊,而後插入,固然這樣也就會有部份內存浪費,但可必定程度上減小內存碎片,整體上,利大於弊。當Memcache的內存滿後,它清除舊數據的原則爲:LRU閒置>過時>最少訪問。並且它採用的是惰性刪除,它並無提供監控數據過時的機制,而是惰性的,當查詢到某個key的數據時,若是過時,那麼直接拋棄。
Memcache的集羣-cluster搭建超級簡單,根本不須要服務器端配置。它是經過客戶端的驅動程序實現了集羣的配置,並且配置超級簡單。
客戶端實現集羣的原理:首先客戶端配置多臺集羣機器的ip和端口的列表。而後客戶端驅動程序在寫入數據以前,首先對key作處理獲得hash值後,對總的機器的個數進行取餘,而後就選擇餘數對應的機器。
以下圖爲一個C#存數據到Memcache集羣的代碼:
因爲Redis也經常使用做分佈式緩存,因此在本身用過兩者以後,一個簡單的體會以下(兩者詳細的對比,請到網上找專題便可):
首先兩者都是key-value式存儲。
Memcache是多線程的(有相應的鎖機制),須要考慮線程安全問題;Redis是單線程的,不須要考慮線程安全問題。
Memcache沒有提供主從複製機制,容錯性很差。(沒有HA-高可用性);Redis提供主從複製。
Memcache的集羣配置很是很是簡單,不須要配置服務器端,只須要在客戶端初始化一個serverList便可;Redis須要配置服務器端。
Memcache只能作緩存,不能持久化;Redis是一個NoSql內存數據庫,提供兩種持久化機制。
Redis提供五種value的類型,很豐富(string /list/hash/set/zset);Memcache的數據類型相對單一。
因爲咱們當下的一些問題,高併發訪問數據庫的痛楚:死鎖;磁盤的IO之痛:效率極低;多服務共享數據等。Memcache以它本身的優點:讀寫性能完美(沒有提供主從複製,全部代碼基本只考慮性能最佳);超簡單集羣搭建;開源;學習成本低,入門很是容易;豐富的成功案例等,成爲了當代流行的分佈式緩存框架。