你們好,我是Java最全面試題庫
的提褲姐,今天這篇是分佈式技術的第三篇,主要介紹分佈式Memcache;在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。面試
Memcached主要的 cache機制是LRU最近最少用算法+超時失效
。
當存數據到 memcached中,能夠指定該數據在緩存中能夠呆多久 ;若是 memcached的內存不夠用了,過時的 slabs會優先被替換,接着就輪到老的未被使用的 slabs。算法
不實現。 Memcached應該是應用的緩存層。數據庫
它的設計自己就不帶有任何冗餘機制。若是一個 Memcached節點失去了全部數據,應該能夠從數據源(好比數據庫)再次獲取到數據。特別注意,應用應該能夠容忍節點的失效。不要寫一些糟糕的查詢代碼,寄但願於 memcached來保證一切,若是擔憂節點失效會大大加劇數據庫的負擔,那麼能夠採起一些辦法。好比能夠增長更多的節點(來減小丟失一個節點的影響),熱備節點(在其餘節點down了的時候接管ip等等)。緩存
沒有身份認證機制;
memcached是運行在應用下層的軟件(身份驗證應該是應用上層的職責)。 memcached的客戶端和服務器端之因此是輕量級的,部分緣由就是徹底沒有實現身份驗證機制。這樣, memcached能夠很快地建立新鏈接,服務器端也無需任何配置。
若是但願限制訪問,可使用防火牆,或者讓 memcached監聽unix domain socket.服務器
key的最大長度是250個字符。
須要注意的是,250是 memcached服務器端內部的限制,若是使用的客戶端支持key的前綴或相似特性,那麼key(前綴+原始key
)的最大長度是能夠超過250個字符的。推薦使用較短的key,由於能夠節省內存和帶寬。多線程
過時時間最大能夠達到30天。memcached把傳入的過時時間(時間段)解釋成時間點後,一旦到了這個時間點,memcache就把item置爲失效狀態。這是一個簡單但 obscure的機制。dom
1MB。若是數據大於1MB,能夠考慮在客戶端壓縮或拆分到多個key中。socket
線程就是定律;memcached1.2及更高版本擁有了多線程模式。多線程模式容許 memcached可以充分利用多個CPU,並在CPU之間共享全部的緩存數據。 memcached使用一種簡單的鎖機制來保證數據更新操做的互斥。相比在同一個物理機器上運行多個 memcached實例,這種方式可以更有效地處理 multi gets。
若是系統負載並不重,也許不須要啓用多線程工做模式。若是您在運行一個擁有大規模硬件的、龐大的網站,將會看到多線程的好處。分佈式
簡單地總結一下:命令解析,memcached在這裏花了大部分時間能夠運行在多線程模式下。 memcached內部對數據的操做是基於不少全局鎖的(所以這部分工做不是多線程的)。將來對多線程模式的改進,將移除大量的全局鎖,提升 memcached在負載極高的場景下的性能。memcached