memcached定義 數據庫
memcached 是一套分佈式的高速緩存系統,被普遍應用於應用系統的緩存層來提高應用程序的訪問速度;memcache缺少認證以及安全管制,這代表應將memcached服務器放置在防火牆後;memcached的API使用32比特的循環冗餘校驗(CRC-32)計算鍵值後,將數據分散在不一樣的服務器上。當表格滿了之後,接下來新增的數據會以LRU機制替換掉。因爲memcached一般只是看成緩存系統使用,因此使用memcached的應用程序在寫回較慢的系統時(像是後端的數據庫)須要額外的代碼更新memcached內的數據;memcached的緩存是基於內存的,所以不建議使用memcached緩存複雜的對象後端
經過定義可知,使用memcached能夠高速的緩存頻繁訪問的對象,從而減輕存儲系統(如關係型數據庫,磁盤等)的訪問負擔;其次,memcache緩存的內容是在內存中,訪問速度快,能夠爲應用系統實時響應提供依據。緩存
memcached適用於什麼狀況安全
1. 底層數據庫壓力大,經過memcached能夠將頻繁訪問的數據對象進行緩存,減小對底層數據庫的訪問來達到減輕數據庫壓力,使數據庫有時間和處理能力去處理其餘後臺邏輯運算。服務器
3. 對象變化週期長,也就是說對象長時間不進行修改,能夠將這些對象緩存到memcached中,供業務快速訪問。而對於對象變化比較頻繁的,不建議memcached來緩存,由於memcached的訪問很快,並且沒有事務來控制數據一致性,因此時常致使緩存對象與時間保存對象不一致的狀況。併發
memcached分佈式的優點分佈式
memcached做爲緩存層,須要緩存的內容會愈來愈多,當一臺服務器沒法承受全部緩存的內容時,就須要考慮將memcache調整爲分佈式,經過多臺服務器來分擔緩存的壓力。memcached分佈式的優點有哪些呢:memcached
1. 客戶端擔當分佈式的master,經過客戶端的分佈函數(默認哈希取餘的方式)來將緩存的key分散到不一樣服務器上。至於爲何客戶端擔當分佈式的master,是因爲只要分佈函數一致,那麼不一樣客戶端都會將相同的key會分配到同一臺服務器上,並且master的職責比較單一(就是根據key獲得數據所在服務器)。函數
2. memcached分佈式集羣上某臺服務器宕機,客戶端訪問的緩存恰巧存儲在宕機的服務器上時,緩存層被穿透去底層存儲層讀取數據,並將讀取的內容緩存到未宕機的服務器上(分佈方式去掉宕機的服務器,而後根據哈希取餘的方式肯定新的服務器)。性能
3. memcached分佈式集羣上宕機的服務器修復上線後,客戶端訪問的緩存能訪問該臺宕機的服務器了,可是緩存的內容卻在其餘服務器上,此時緩存層再次被穿透去底層存儲層讀取數據,並將讀取的內容從新緩存到該宕機服務器上供後續訪問使用;對於保存有相同key的另外一臺服務器上的相同key不會被自動刪除但也不會再次使用,直到垃圾回收時清除。
4. memcached分佈式集羣上若是不一樣服務器存在相同的key,那麼刪除該key時,只會刪除根據分佈函數獲得的服務器上的key,對於其餘服務器上相同的key則不會被刪除,直到垃圾回收。形成的風險是若是能訪問的這臺服務器又宕機了,而此時有相同key的服務器上key還未清除並且恰巧訪問這臺,就有可能形成髒讀。
memcached分佈式的缺點
1. memcached分佈式不會存儲副本,也就是說某一臺服務器宕機,緩存在該臺服務器上的內容就會丟失。
2. memcached的key分佈並非徹底離散的,致使的結果就是某些臺服務器緩存的量大,某些臺服務器緩存的量小;不過memcached的訪問速度快,緩存量大也不會形成太大的延遲。
3. 數據類型比較單一,不能存儲複雜的對象。
memcached經常使用啓動參數
-p 指定memcached啓動的端口,默認爲11211
-m 指定memcached使用的最大內存,默認爲64M
-t 指定memcached線程數,默認爲4
-l 綁定的IP地址,默認爲全部都容許訪問,不管內外網或者本機更換IP,有安全隱患,若設置爲127.0.0.1則只容許本機訪問
-d start 啓動memcached服務
-d restart 重啓memcached服務
-c 最大同時鏈接數,默認爲1024
memcached性能
memcached的性能已經特別高,可是隨着存儲量和併發量的增大,性能會降低,可是使用集羣,性能比使用單臺時要高。詳情請看:http://www.diggerplus.org/archives/190;
其餘
1. memcached的key最大存儲250個英文字母
2. memcached的key不能存在空格和控制字符
3. memcached的默認過時時間爲30天,若是設置超時時間長於30天,則30天起效,也就是說超時時間不會超過30天
4. memcached單個key的值最大爲1M,若是緩存的值大小大於1M,能夠經過將值拆分爲多個key進行保存