memcache緩存服務(wù)器是什么?-創(chuàng)新互聯(lián)

1,memcache簡介

mamcache是一套分布式的高速緩存系統(tǒng),可以提高網(wǎng)站訪問的速度,尤其是對于一些大型的公司或者頻繁訪問數(shù)據(jù)庫的網(wǎng)站訪問速度提升效果十分顯著,memcache是一個開源免費的軟件,memcache通過鍵值對的訪問將數(shù)據(jù)緩存在內(nèi)存當(dāng)中,減少從后端數(shù)據(jù)讀取數(shù)據(jù)的次數(shù)。

成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元澠池做網(wǎng)站,已為上家服務(wù),為澠池各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

2,memcache分布式緩存系統(tǒng)

分布式:將數(shù)據(jù)分散存儲在不同服務(wù)器上。
緩存系統(tǒng):嚴(yán)格意義上來說,memcache不是一個nosql數(shù)據(jù)庫,只是提供內(nèi)存緩存功能系統(tǒng),那怎么理解別人來說memcache是一個nosql數(shù)據(jù)庫呢?關(guān)系型數(shù)據(jù)庫是基于二維表來存放數(shù)據(jù)(事務(wù),元祖,數(shù)據(jù)的持久性)等,最簡單的理解就是數(shù)據(jù)在斷電后不會丟失,非關(guān)系型數(shù)據(jù)庫不使用sql語句來進(jìn)行數(shù)據(jù)的查詢而是基于key-value存儲和讀取數(shù)據(jù)的,所以又可以理解成nosql數(shù)據(jù)庫了。

3,memcache和mysql區(qū)別

1)沒有使用sql語句查詢或存儲數(shù)據(jù);
2)memcache中沒有mysql的表的概念,都是使用鍵值對來保存的;
3)memcache的數(shù)據(jù)保存在內(nèi)存當(dāng)中,數(shù)據(jù)讀取速度快,數(shù)據(jù)斷電丟失;

4,memcache分布式部署的原理

memcache雖然被稱為“分布式緩存”,但是memcache本身完全不具備分布式的功能,memcache集群之間不會相互通信,所謂的“分布式”,完全依賴于客戶端程序的實現(xiàn),就像下面這張圖的流程一樣。
memcache緩存服務(wù)器是什么?
同時基于這張圖,理一下memcache一次寫緩存的流程:
① 應(yīng)用程序輸入需要寫緩存的數(shù)據(jù);
② API將key輸入路由算法模塊,路由算法根據(jù)key和memcache集群服務(wù)器列表得到一臺服務(wù)器編號;
③ 由服務(wù)器編號得到memcache及其的ip地址和端口號;
④ API調(diào)用通信模塊和指定編號的服務(wù)器通信,將數(shù)據(jù)寫入該服務(wù)器,完成一次分布式緩存的寫操作。

讀操作和寫緩存一樣,只要使用相同的路由算法和服務(wù)器列表,只要應(yīng)用程序查詢的是相同的key,memcache客戶端總是訪問相同的客戶端去讀取數(shù)據(jù),只要服務(wù)器中還緩存著該數(shù)據(jù),就能保證緩存命中。

這種memcache集群的方式也是從分區(qū)容錯性的方面考慮的,假如node02宕機(jī)了,那么node02上面存儲的數(shù)據(jù)都不可用了,此時由于集群中node0和node1還存在,下一次請求node02中存儲的key值的時候,肯定是沒有命中的,這時先從數(shù)據(jù)庫中拿到要緩存的數(shù)據(jù),然后路由算法模板根據(jù)key值在node0和node1中選取一個節(jié)點,把對應(yīng)的數(shù)據(jù)放進(jìn)去,這樣下一次就有可以走緩存了。但集群的做法要考慮成本的問題。

5,路由算法

從上面的圖中,看出對服務(wù)器集群的管理,路由算法至關(guān)重要,就和負(fù)載均衡算法一樣,路由算法決定著究竟該訪問集群中的哪臺服務(wù)器。
1)余數(shù)hash算法:
將要存儲的key-vaule數(shù)據(jù)進(jìn)行hash運算得到一個值,然后根據(jù)memcache的數(shù)據(jù)進(jìn)行整除取余。根據(jù)余數(shù)把數(shù)據(jù)方放到對應(yīng)的服務(wù)器上,由于hash值的隨機(jī)性很大,所以服務(wù)器上存放的數(shù)據(jù)也就比較平衡,一般不會造成大量數(shù)據(jù)只放在一臺服務(wù)器上的情況,但是這樣又出現(xiàn)一個問題,當(dāng)添加一臺節(jié)點的時候,之前的數(shù)據(jù)就會讀取不到。
解決方案:
(1)在網(wǎng)站訪問量低的時候,技術(shù)團(tuán)隊加班,擴(kuò)容,重啟服務(wù)器
(2)通過模擬請求的方式進(jìn)行緩存預(yù)熱,使服務(wù)器中的數(shù)據(jù)重新分布。

2) 一致性hash算法:
通過一個叫做一致性hash環(huán)的數(shù)據(jù)結(jié)果實現(xiàn)key到緩存服務(wù)器的hash映射,簡單來說一致性hash將整個hash值的控制組織成一個虛擬的圓環(huán)(這個環(huán)被稱為一致性hash環(huán))
memcache緩存服務(wù)器是什么?
缺點:當(dāng)服務(wù)器節(jié)點太少的時候,容易造成節(jié)點數(shù)據(jù)不均勻??梢赃x擇采用增加虛擬節(jié)點的方式解決。
更重要的是,集群中緩存服務(wù)器節(jié)點越多,增加/減少節(jié)點帶來的影響越??;也就是說隨著集群規(guī)模的增大,繼續(xù)命中原有緩存數(shù)據(jù)的概率會越來越大,雖然仍然有小部分?jǐn)?shù)據(jù)緩存在服務(wù)器中不能被讀到,但是這個比例足夠小,即使訪問數(shù)據(jù)庫,也不會對數(shù)據(jù)庫造成致命的負(fù)載壓力。

6,memcache實現(xiàn)原理

首先要說明一點,memcache的數(shù)據(jù)存放在內(nèi)存中,因此有以下特點:
1)訪問數(shù)據(jù)的速度比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫要快,因為傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(mysql,oracle)為了保證數(shù)據(jù)的持久性,數(shù)據(jù)存放在硬盤中,io操作速度慢。
2)memcache的數(shù)據(jù)存放在內(nèi)存中,只要memcache重啟,數(shù)據(jù)就會丟失。
3)既然memacache的數(shù)據(jù)存放在內(nèi)存中,那么勢必受到機(jī)器位數(shù)的限制,32位機(jī)器最多只能使用2GB的內(nèi)存空間,64位機(jī)器可以認(rèn)為沒有上限。

然后我們來看一下memcache的原理,memcache最重要的是內(nèi)存如何分配,memcache采用的內(nèi)存分配方式是固定空間分配,如下圖所示:
memcache緩存服務(wù)器是什么?
這張圖片里面涉及了 slab_class、 slab、 page、 chunk 四個概念,它們之間的關(guān)系是:
1、 MemCache 將內(nèi)存空間分為一組 slab;
2、每個 slab 下又有若干個 page,每個 page 默認(rèn)是 1M,如果一個 slab 占用 100M 內(nèi)存的話,那么這個 slab 下應(yīng)該有 100 個 page;
3、每個 page 里面包含一組 chunk, chunk 是真正存放數(shù)據(jù)的地方,同一個 slab 里面的 chunk的大小是固定的;
4、有相同大小 chunk 的 slab 被組織在一起,稱為 slab_class;
MemCache 內(nèi)存分配的方式稱為 allocator(分配運算), slab 的數(shù)量是有限的,幾個、十幾個或者幾十個,這個和啟動參數(shù)的配置相關(guān)。

memcache中的value存放的地方是有value的大小決定的,value總是會被存放到chunk大小最接近的一個slab中,比如 slab[1]的chunk 大小為 80 字節(jié)、 slab[2]的 chunk 大小為 100字節(jié)、 slab[3]的 chunk 大小為 128 字節(jié)(相鄰 slab 內(nèi)的 chunk 基本以 1.25 為比例進(jìn)行增長,MemCache 啟動時可以用-f 指定這個比例),那么過來一個88字節(jié)的value,這個value將被放到2號slab中。
放到slab的時候,首先slab要申請內(nèi)存,申請內(nèi)存是以page為單位的,所以在放入第一個數(shù)據(jù)的時候,無論帶下多少,都會有1M大小的page被分配給該slab。申請到page后, slab會將這個page的內(nèi)存按chunk的大小進(jìn)行切分,這樣就變成了一個chunk數(shù)組,最后從這個 chunk 數(shù)組中選擇一個用于存儲數(shù)據(jù)。
如果這個slab中沒有chunk可以分配了怎么辦,如果memcache啟動沒有追加-M(禁止LRU,這種情況下內(nèi)存不夠會報Out Of Memory 錯誤),那么 MemCache 會把這個 slab 中最近最少使用的 chunk 中的數(shù)據(jù)清理掉,然后放上最新的數(shù)據(jù)。

7,memcache的工作流程

memcache緩存服務(wù)器是什么?
(1)檢查客戶端的請求數(shù)據(jù)是否在memcached中,如果有,直接把請求數(shù)據(jù)返回,不在對數(shù)據(jù)庫進(jìn)行任何操作,路徑操作為①②③⑦。
(2)如果請求的數(shù)據(jù)不在memcached中,就去查數(shù)據(jù)庫,把從數(shù)據(jù)庫中獲取的數(shù)據(jù)返回給客戶端,同時把數(shù)據(jù)緩存一份到memecached中(memcached客戶端不負(fù)責(zé),需要程序明確實現(xiàn)),路徑操作為①②④⑤⑦⑥。
(3)每次更新數(shù)據(jù)庫的同時更新memcached中的數(shù)據(jù),保證一致性。
(4)當(dāng)分配給memcached內(nèi)存空間用完之后,會使用LRU策略加上到期失效策略,失效數(shù)據(jù)首先被替換,然后再替換掉最近未使用的數(shù)據(jù)。

8,memcached的特征

協(xié)議簡單:
基于文本協(xié)議:常見的協(xié)議http,ftp,smtp都是基于文本行的,所謂基于文本行,指的是信息以文本傳遞;
基于libevent事件處理:
libevent是一套利用c語言開發(fā)的程序庫,它將BSD系統(tǒng)的kqueue(BSD是unix的衍生版本),linux系統(tǒng)的epoll等事件處理功能封裝成一個接口,與傳統(tǒng)的select相比,提高了性能。
內(nèi)置的內(nèi)存管理方式:
所有數(shù)據(jù)都保存在內(nèi)存中,數(shù)據(jù)訪問速度快,但沒有考慮數(shù)據(jù)單點容災(zāi)問題,重啟服務(wù),所有數(shù)據(jù)會丟失。
分布式:
各個memcached服務(wù)器之間互不通信,各自獨立存取數(shù)據(jù),不共享任何信息,服務(wù)器并不具備分布式功能,分布是部署取決于memcache客戶端。
memcache的安裝分為兩個過程:memcache服務(wù)器端的安裝和memcached客戶端的安裝。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:memcache緩存服務(wù)器是什么?-創(chuàng)新互聯(lián)
標(biāo)題URL:http://muchs.cn/article6/cdchig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站靜態(tài)網(wǎng)站、網(wǎng)頁設(shè)計公司、網(wǎng)站排名、網(wǎng)站建設(shè)、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)