摘要:簡介是高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)應(yīng)用的速度提高可擴(kuò)展性。當(dāng)表格滿了以后,接下來新增的資料會以機(jī)制替換掉。目前有模式和模式。
memcached簡介
memcached是高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應(yīng)用的速度、提高可擴(kuò)展性。
memcached的API使用32位元的循環(huán)冗余校驗(yàn)(CRC-32)計算鍵值后,將資料分散在不同的機(jī)器上。當(dāng)表格滿了以后,接下來新增的資料會以LRU機(jī)制替換掉。由于memcached通常只是當(dāng)作快取系統(tǒng)使用,所以使用memcached的應(yīng)用程式在寫回較慢的系統(tǒng)時(像是后端的數(shù)據(jù)庫)需要額外的程式碼更新memcached內(nèi)的資料
Memcached基于一個存儲鍵/值對的hashmap。其守護(hù)進(jìn)程(daemon
)是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護(hù)進(jìn)程通信
http://nl1.php.net/manual/zh/...
memcached分布式hash策略Memcache安裝完成之后,可以設(shè)置哈希策略,memcache.hash_strategy。目前有standard模式和consistent模式。standard模式其實(shí)就是%,即取模。而consistent,就是hash的一致性算法。
在Memcache中,hash策略在php.ini文件中設(shè)置
[Memcache] Memcache.allow_failover = 1 Memcache.hash_strategy =consistent Memcache.hash_function =crc32
余數(shù)分布算法
假如有2臺服務(wù)器node0,node1和node2,當(dāng)hashcode=5時,5%3=2,就路由到第3臺機(jī)器。但是如果其中node2服務(wù)down之后,那么所有路由到node2的數(shù)據(jù)都會丟失
后期如果業(yè)務(wù)增長后,需要增加node4,那么之前的所有數(shù)據(jù)又要失效了,所以不方便擴(kuò)展
一致性分布算法(基于libketama)
簡單說來,一致性hash算法就是先把服務(wù)器也通過某一個特征(如IP/MAC地址)hash一下,這樣服務(wù)器會按照分布(可能不均勻)在一個范圍,然后把key再hash一下,然后看key最近的下個服務(wù)器作為該key的存儲bin。
這樣,如果增加一臺服務(wù)器,重新分配的key只是分布再新增的這個服務(wù)器和上一個最近的服務(wù)器之間的key,其余的都不變。
http://blog.csdn.net/kongqz/a...
Hash表是Memcached里面最重要的結(jié)構(gòu)之一,其采用鏈接法來處理Hash沖突(和php解決hash沖突一樣,鏈地址法),當(dāng)Hash表中的項(xiàng)太多時,也就是Hash沖突比較高的時候,Hash表的遍歷就脫變成單鏈表,此時為了提供Hash的性能,Hash表需要擴(kuò)容,Memcached的擴(kuò)容條件是當(dāng)表中元素個數(shù)超過Hash容量的1.5倍時就進(jìn)行擴(kuò)容,擴(kuò)容過程由獨(dú)立的線程來完成,擴(kuò)容過程中會采用2個Hash表,將老表中的數(shù)據(jù)通過Hash算法映射到新表中,每次移動的桶的數(shù)目可以配置,默認(rèn)是每次移動老表中的1個桶。
http://blog.csdn.net/liziyun5...
把數(shù)據(jù)組裝成 item 之前, 必須為 item 分配存儲空間, memcached 不是直接從操作系統(tǒng)分配內(nèi)存的,
memcached內(nèi)部使用了類似內(nèi)存池的東西, 即slab機(jī)制, 來管理內(nèi)存. 內(nèi)存的分配和回收都交給 slab 子系統(tǒng)實(shí)現(xiàn)。
memcached 中, 內(nèi)存的分配和回收, 都是通過 slab 實(shí)現(xiàn)的, slab機(jī)制相當(dāng)于內(nèi)存池機(jī)制,
實(shí)現(xiàn)從操作系統(tǒng)分配一大塊內(nèi)存, 然后 memcached 自己管理這塊內(nèi)存, 負(fù)責(zé)分配與回收
像一般的內(nèi)存池一樣, 從操作系統(tǒng)分配到一大塊內(nèi)存后, 為了方便管理, 把這大塊內(nèi)存劃分為各種大小的 chunk,
chunk的大小按照一定比例逐漸遞增, 如下圖所示:
從 slab 分配內(nèi)存的時候, 根據(jù)請求內(nèi)存塊的大小, 找到大小最合適的 chunk 所在的 slabclass, 然后從這個slabclass 找空閑的 chunk 分配出去. 所謂最合適就是指 chunk 的大小能夠滿足要求, 而且碎片最小。如下圖:
這種分配方式的缺點(diǎn)是存在內(nèi)存碎片, 例如, 將 100字節(jié)的 item 存儲到一個 128 字節(jié)的 chunk, 就有 28 字節(jié)的內(nèi)存浪費(fèi), 如下圖所示:
slabclass 是由 chunk size 確定的, 同一個 slabclass 內(nèi)的 chunk 大小都一樣, 每一個
slabclass 要負(fù)責(zé)管理 一些內(nèi)存, 初始時, 系統(tǒng)為每個 slabclass 分配一個 slab, 一個 slab
就是一個內(nèi)存塊, 其大小等于 1M. 然后每個 slabclass 再把 slab 切分成一個個 chunk, 算一下, 一個
slab 可以切分得到 1M/chunk_size 個chunk
一個slabclass分配一個slab
一個slab分成多個chunk(同一個slab中chunk相等)
一個chunk就是一個item(這個item不一定全部利用)
圖片來自
memcache其他延伸Magent代理
http://blog.csdn.net/qwe61120...
參考資料:
http://www.cnblogs.com/xrq730...
memcache源碼分析
http://blog.csdn.net/column/d...
http://blog.csdn.net/lcli2009...
http://www.jianshu.com/p/fcf9...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/61717.html
摘要:而今天主要講用得比較多的三個。支持持久化操作,可以進(jìn)行及數(shù)據(jù)持久化到磁盤,從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段。單線程請求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。 前言 NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)不斷的發(fā)展,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付新互聯(lián)網(wǎng)模式的網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服...
摘要:而今天主要講用得比較多的三個。支持持久化操作,可以進(jìn)行及數(shù)據(jù)持久化到磁盤,從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段。單線程請求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。 前言 NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)不斷的發(fā)展,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付新互聯(lián)網(wǎng)模式的網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服...
摘要:而今天主要講用得比較多的三個。支持持久化操作,可以進(jìn)行及數(shù)據(jù)持久化到磁盤,從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段。單線程請求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。 前言 NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)不斷的發(fā)展,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付新互聯(lián)網(wǎng)模式的網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服...
閱讀 2902·2021-11-23 09:51
閱讀 1547·2021-11-15 11:36
閱讀 3006·2021-10-13 09:40
閱讀 1864·2021-09-28 09:35
閱讀 13040·2021-09-22 15:00
閱讀 1367·2019-08-29 13:56
閱讀 2924·2019-08-29 13:04
閱讀 2699·2019-08-28 18:06