国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Web服務(wù)器 > 正文

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理

2024-09-01 13:45:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Memcached概念:
Memcached是一個(gè)免費(fèi)開(kāi)源的,高性能的,具有分布式對(duì)象的緩存系統(tǒng),它可以用來(lái)保存一些經(jīng)常存取的對(duì)象或數(shù)據(jù),保存的數(shù)據(jù)像一張巨大的HASH表,該表以Key-value對(duì)的方式存在內(nèi)存中。
官網(wǎng)下載地址:
運(yùn)行環(huán)境: linux,BSD,windows都可跑
協(xié)議理論: (英文)

操作流程:

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理


1、檢查客戶(hù)端的請(qǐng)求數(shù)據(jù)是否在memcached中,如有,直接把請(qǐng)求數(shù)據(jù)返回,不再對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何操作,路徑操作為①②③⑦。

2、如果請(qǐng)求的數(shù)據(jù)不在memcached中,就去查數(shù)據(jù)庫(kù),把從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)返回給客戶(hù)端,同時(shí)把數(shù)據(jù)緩存一份到memcached中(memcached客戶(hù)端不負(fù)責(zé),需要程序明確實(shí)現(xiàn)),路徑操作為①②④⑤⑦⑥。
3、每次更新數(shù)據(jù)庫(kù)的同時(shí)更新memcached中的數(shù)據(jù),保證一致性。

4、當(dāng)分配給memcached內(nèi)存空間用完之后,會(huì)使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數(shù)據(jù)首先被替換,然后再替換掉最近未使用的數(shù)據(jù)。

Memcached特征:

協(xié)議簡(jiǎn)單
它是基于文本行的協(xié)議,直接通過(guò)telnet在memcached服務(wù)器上可進(jìn)行存取數(shù)據(jù)操作
基于libevent事件處理
Libevent是一套利用C開(kāi)發(fā)的程序庫(kù),它將BSD系統(tǒng)的kqueue,Linux系統(tǒng)的epoll等事件處理功能封裝成一個(gè)接口,與傳統(tǒng)的select相比,提高了性能。
內(nèi)置的內(nèi)存管理方式
所有數(shù)據(jù)都保存在內(nèi)存中,存取數(shù)據(jù)比硬盤(pán)快,當(dāng)內(nèi)存滿(mǎn)后,通過(guò)LRU算法自動(dòng)刪除不使用的緩存,但沒(méi)有考慮數(shù)據(jù)的容災(zāi)問(wèn)題,重啟服務(wù),所有數(shù)據(jù)會(huì)丟失。
分布式
各個(gè)memcached服務(wù)器之間互不通信,各自獨(dú)立存取數(shù)據(jù),不共享任何信息。服務(wù)器并不具有分布式功能,分布式部署取決于memcache客戶(hù)端。

Memcached安裝與啟動(dòng):
安裝memcached需要先安裝libevent

復(fù)制代碼 代碼如下:


Shell>tar zxvf libevent-1.4.14b-stable.tar.gz
Shell>cd libevent-1.4.14b-stable
Shell>./configure
Shell>make && make install


安裝memcached

復(fù)制代碼 代碼如下:


Shell>tar zxvf memcached-1.2.5.tar.tar
Shell>cd memcached-1.2.5
Shell>./configure –prefix=/usr/local/memcached
Shell>make && make install


啟動(dòng)memcached
Shell>/usr/local/memcached/bin/memcached –p 11211 –d –u root –P /tmp/memcached.pid

復(fù)制代碼 代碼如下:


-P是表示使用TCP,默認(rèn)端口為11211
-d表示后臺(tái)啟動(dòng)一個(gè)守護(hù)進(jìn)程(daemon)
-u表示指定root用戶(hù)啟動(dòng),默認(rèn)不能用root用戶(hù)啟動(dòng)
-P表示進(jìn)程的pid存放地點(diǎn),此處“p”為大寫(xiě)“P”
-l,后面跟IP地址,手工指定監(jiān)聽(tīng)I(yíng)P地址,默認(rèn)所有IP都在監(jiān)聽(tīng)
-m后面跟分配內(nèi)存大小,以MB為單位,默認(rèn)為64M
-c最大運(yùn)行并發(fā)連接數(shù),默認(rèn)為1024
-f 塊大小增長(zhǎng)因子,默認(rèn)是1.25
-M 內(nèi)存耗盡時(shí)返回錯(cuò)誤,而不是刪除項(xiàng),即不用LRU算法



在64位系統(tǒng)中,會(huì)報(bào)libevent-1.4.so.2文件無(wú)法找到,解決辦法是把32位目錄里的同名文件鏈接至64位目錄中,即像windows那樣建立快捷方式。
Shell > /usr/local/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2
啟動(dòng)后如果發(fā)現(xiàn)沒(méi)有端口在監(jiān)聽(tīng),是因?yàn)槊鼊?dòng)命令時(shí)帶pid參數(shù)的“p”是大寫(xiě)“P”,你可能寫(xiě)成小寫(xiě)了。

命令行直接操作命令

存,有六個(gè)命令項(xiàng)。

復(fù)制代碼 代碼如下:


Set:添加一個(gè)新條目到memcached或是用新的數(shù)據(jù)替換替換掉已存在的條目
Add:當(dāng)KEY不存在的情況下,它向memcached存數(shù)據(jù),否則,返回NOT_STORED響應(yīng)
Replace:當(dāng)KEY存在的情況下,它才會(huì)向memcached存數(shù)據(jù),否則返回NOT_STORED響應(yīng)
Cas:改變一個(gè)存在的KEY值 ,但它還帶了檢查的功能
Append:在這個(gè)值后面插入新值
Prepend:在這個(gè)值前面插入新值



取,有兩個(gè)命令項(xiàng):

復(fù)制代碼 代碼如下:


Get:取單個(gè)值 ,從緩存中返回?cái)?shù)據(jù)時(shí),將在第一行得到KEY的名字,flag的值和返回的value長(zhǎng)度,真正的數(shù)據(jù)在第二行,最后返回END,如KEY不存在,第一行就直接返回END
Get_multi:一次性取多個(gè)值



刪除,一個(gè)命令:

復(fù)制代碼 代碼如下:

Delete



實(shí)例操作:
先連接到memcache

復(fù)制代碼 代碼如下:

shell>telnet 127.0.0.1 11211




取數(shù)據(jù)

復(fù)制代碼 代碼如下:

Get liuguohua


回車(chē)后,第一行返回VALUE liuguohua 0 21
第二行,返回真正值369369.blog.51cto.com

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理



Memcached的內(nèi)存算法:

Memcached利用slab allocation機(jī)制來(lái)分配和管理內(nèi)存,它按照預(yù)先規(guī)定的大小,將分配的內(nèi)存分割成特定長(zhǎng)度的內(nèi)存塊,再把尺寸相同的內(nèi)存塊分成組,數(shù)據(jù)在存放時(shí),根據(jù)鍵值 大小去匹配slab大小,找就近的slab存放,所以存在空間浪費(fèi)現(xiàn)象。

傳統(tǒng)的內(nèi)存管理方式是,使用完通過(guò)malloc分配的內(nèi)存后通過(guò)free來(lái)回收內(nèi)存,這種方式容易產(chǎn)生內(nèi)存碎片并降低操作系統(tǒng)對(duì)內(nèi)存的管理效率。

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理



Memcached的緩存策略:

Memcached的緩存策略是LRU(最近最少使用)加上到期失效策略。當(dāng)你在memcached內(nèi)存儲(chǔ)數(shù)據(jù)項(xiàng)時(shí),你有可能會(huì)指定它在緩存的失效時(shí)間,默認(rèn)為永久。當(dāng)memcached服務(wù)器用完分配的內(nèi)時(shí),失效的數(shù)據(jù)被首先替換,然后也是最近未使用的數(shù)據(jù)。在LRU中,memcached使用的是一種Lazy Expiration策略,自己不會(huì)監(jiān)控存入的key/vlue對(duì)是否過(guò)期,而是在獲取key值時(shí)查看記錄的時(shí)間戳,檢查key/value對(duì)空間是否過(guò)期,這樣可減輕服務(wù)器的負(fù)載。

Memcached的分布式算法:
當(dāng)向memcached集群存入/取出key/value時(shí),memcached客戶(hù)端程序根據(jù)一定的算法計(jì)算存入哪臺(tái)服務(wù)器,然后再把key/value值存到此服務(wù)器中。也就是說(shuō),存取數(shù)據(jù)分二步走,第一步,選擇服務(wù)器,第二步存取數(shù)據(jù)。

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理



分布式算法(Consistent Hashing):

選擇服務(wù)器算法有兩種,一種是根據(jù)余數(shù)來(lái)計(jì)算分布,另一種是根據(jù)散列算法來(lái)計(jì)算分布。
余數(shù)算法:
先求得鍵的整數(shù)散列值,再除以服務(wù)器臺(tái)數(shù),根據(jù)余數(shù)確定存取服務(wù)器,這種方法計(jì)算簡(jiǎn)單,高效,但在memcached服務(wù)器增加或減少時(shí),幾乎所有的緩存都會(huì)失效。
散列算法:
先算出memcached服務(wù)器的散列值,并將其分布到0到2的32次方的圓上,然后用同樣的方法算出存儲(chǔ)數(shù)據(jù)的鍵的散列值并映射至圓上,最后從數(shù)據(jù)映射到的位置開(kāi)始順時(shí)針查找,將數(shù)據(jù)保存到查找到的第一個(gè)服務(wù)器上,如果超過(guò)2的32次方,依然找不到服務(wù)器,就將數(shù)據(jù)保存到第一臺(tái)memcached服務(wù)器上。如果添加了一臺(tái)memcached服務(wù)器,只在圓上增加服務(wù)器的逆時(shí)針?lè)较虻牡谝慌_(tái)服務(wù)器上的鍵會(huì)受到影響。

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理



Memcache的管理與性能監(jiān)控:

可以通過(guò)命令行直接管理與監(jiān)控也可通過(guò)nagios,cacti等web軟件進(jìn)行監(jiān)控
命令行:

復(fù)制代碼 代碼如下:


Shell>telnet 127.0.0.1 1211 //如果在啟動(dòng)時(shí)指定了IP及端口號(hào),這里要作相應(yīng)改動(dòng)
連接成功后命令
Stats:統(tǒng)計(jì)memcached的各種信息
Stats reset:重新統(tǒng)計(jì)數(shù)據(jù)
Stats slabs,顯示slabs信息,可以詳細(xì)看到數(shù)據(jù)的分段存儲(chǔ)情況
Stats items:顯示slab中的item數(shù)目
Stats cachedump 1 0:列出slabs第一段里存的KEY值
Set|get:保存或獲取數(shù)據(jù)
STAT evictions 0:表示要騰出新空間給新的item而移動(dòng)的合法item數(shù)目


其它常用軟件使用:

復(fù)制代碼 代碼如下:


Shell>./Memcached-tool 127.0.0.1:11211
Shell>./Memcached-tool 127.0.0.1:11211 display


Web軟件:

復(fù)制代碼 代碼如下:


Memcache.php
Nagios插件
Cacti模塊



Memcached與redis比較:

Memcache緩存系統(tǒng)知識(shí)點(diǎn)梳理



本文出自 “系統(tǒng)網(wǎng)絡(luò)運(yùn)維” 博客,請(qǐng)務(wù)必保留此出處

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 申扎县| 夏河县| 托里县| 丰顺县| 晴隆县| 宝鸡市| 长阳| 南昌县| 锦屏县| 隆化县| 右玉县| 盘锦市| 宁强县| 手游| 靖远县| 平度市| 宜君县| 马边| 呼伦贝尔市| 石景山区| 达孜县| 如皋市| 湖州市| 惠东县| 忻城县| 明水县| 鄯善县| 邮箱| 大新县| 和政县| 霍城县| 邵阳市| 龙岩市| 怀远县| 金坛市| 资阳市| 垦利县| 翁源县| 阳西县| 定陶县| 林州市|