先簡(jiǎn)單說(shuō)下內(nèi)存數(shù)據(jù)庫(kù)革骨,及系統(tǒng)上可用來(lái)保存數(shù)據(jù)。那么析恋,內(nèi)存的緩存操作需要一個(gè)中間件良哲,其次內(nèi)存容易丟失啊绿满!優(yōu)點(diǎn)就是非潮弁猓快,缺點(diǎn)就是有限的內(nèi)存喇颁,但memcached提供高性能的分布式內(nèi)存緩存服務(wù)漏健,組成一個(gè)想多大就多大的內(nèi)存池。
memcached 服務(wù)端與客服端的通信協(xié)議是用的基于文本的ASCII和二進(jìn)制兩種協(xié)議橘霎,這樣調(diào)試和開(kāi)發(fā)蔫浆,so ?easy。
memcached 是基于libevent庫(kù)(一個(gè)非阻塞式的網(wǎng)絡(luò)程序開(kāi)發(fā)的姐叁,是一個(gè)事件觸發(fā)的程序庫(kù)瓦盛,把Linux的epoll,kqueue等事件處理功能封裝成統(tǒng)一的接口洗显,即使并發(fā)數(shù)非常大,也能保持快速響應(yīng))原环。
1. memcached的內(nèi)存存儲(chǔ)處理
? ? ? ? memcached采用自己的內(nèi)存存儲(chǔ)處理挠唆,首先按照預(yù)先規(guī)定的大小,將內(nèi)存分割成各種尺寸的塊(chunk)嘱吗,并把尺寸相同的塊分成組?(chunk group)玄组,從而解決內(nèi)存碎片問(wèn)題。
????????memcached根據(jù)收到的數(shù)據(jù)大小谒麦,選擇最適合數(shù)據(jù)大小的slab俄讹。memcached中保存著slab內(nèi)空閑chunk的列表,根據(jù)該列表選擇chunk绕德,然后將數(shù)據(jù)緩存于其中患膛。
????????由于分配都是固定長(zhǎng)度的內(nèi)存塊,因此無(wú)法有效利用分配的內(nèi)存空間耻蛇,比如將100字節(jié)的數(shù)據(jù)組存放在能放128字節(jié)的chunk中踪蹬,余下28字節(jié)是浪費(fèi)的
?2.memcached的數(shù)據(jù)處理算法?
LRU(Least Recently Used , 刪除最近最少是用的) ?和 Lazy Expiration
3.memcached客戶端分布式結(jié)構(gòu)與算法
無(wú)論P(yáng)HP還是JAVA城丧、.NET延曙,每種語(yǔ)言實(shí)現(xiàn)的客戶端庫(kù)都會(huì)包含至少一種分布式算法來(lái)實(shí)現(xiàn)memcached的分布式。
籠統(tǒng)的來(lái)說(shuō)客戶端庫(kù)是通過(guò)一個(gè)分布式算法和一個(gè)維護(hù)服務(wù)器列表來(lái)實(shí)現(xiàn)memcached的分布式亡哄。關(guān)于分布式算法目前有兩種選擇:取模算法(modula hashing)和一致性。布疙,此處不多介紹蚊惯。
????? ??4.memcached的技術(shù)限制
? ? ? ?memcached還包括一些技術(shù)限制,如下
? ? ? ? ◆ 在memcached中可以保存的item數(shù)據(jù)量是沒(méi)有限制的灵临,只要內(nèi)存足夠截型。
? ? ? ?◆ memcached單進(jìn)程最大使用內(nèi)存為2G,要使用更多內(nèi)存,可以分多個(gè)端口開(kāi)啟多 個(gè) memcached進(jìn)程?
? ? ? ?◆ 最大30天的數(shù)據(jù)過(guò)期時(shí)間儒溉,設(shè)置為永久的也會(huì)在這個(gè)時(shí)間過(guò)期宦焦,由常REALTIME_MAXDELTA ?60*60*24*30控制
? ? ? ?◆ 最大健長(zhǎng)為250字節(jié),大于該長(zhǎng)度無(wú)法存儲(chǔ)顿涣,由常量KEY_MAX_LENGTH 250控制
? ? ? ◆ 單個(gè)item最大數(shù)據(jù)是1MB,超過(guò)IMB數(shù)據(jù)不予存儲(chǔ)波闹,由常量POWER_BLOCK(1048576進(jìn)行控制,它是默認(rèn)的s lab的大小
? ? ? ?◆ 最大同時(shí)連接數(shù)是200涛碑,通過(guò)conn_init()函數(shù)中的freetotal進(jìn)行控制精堕,最大軟接數(shù)是1024,通過(guò)settings.maxconns=1024控制
? ? ? ?◆?空間占用相關(guān)的參數(shù)settings.factor=1.25,setting.chunk_size = 48,影響slab的數(shù)據(jù)占用和進(jìn)步方式
5.兩個(gè)memcached擴(kuò)展
在PHP的pecl站點(diǎn)蒲障,有兩個(gè)實(shí)現(xiàn)功能類似的memcached Ap1紹時(shí)歹篓,它們分別是???????????????? ? ? ? ?memcache(http://pecl.php.net/package/memcache)?和?memcached ?(http://pecl.php.net/package/memcached).
?這兩個(gè)擴(kuò)展庫(kù)和memcached的名字非常相近瘫证,而且功能于伯仲之間。
按時(shí)間追溯庄撮,memcache在2004年9月就已經(jīng)推出背捌,在很多Linux系統(tǒng)中標(biāo)準(zhǔn)配置,也就是原生版本洞斯,而memcached擴(kuò)展卻是在2009年1月才發(fā)布毡庆。memcached擴(kuò)展比較新,幾乎支持memcaced的所有特性巡扇,但必須依賴libmemcached庫(kù)才能運(yùn)行扭仁。
如果不使用Delayed Get這樣的特性,有不想多依賴libmemcached庫(kù)厅翔,完全可以使用memcache乖坠。
6.memcached的安裝
網(wǎng)上太多了,自行百度參考