內(nèi)存緩存軟件 (內(nèi)存比磁盤快)
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、做網(wǎng)站、西烏珠穆沁網(wǎng)絡(luò)推廣、小程序開發(fā)、西烏珠穆沁網(wǎng)絡(luò)營(yíng)銷、西烏珠穆沁企業(yè)策劃、西烏珠穆沁品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供西烏珠穆沁建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:jinyejixie.com
分為服務(wù)端和客戶端
服務(wù)端 memcached
客戶端memcache
誕生的原因。
2003年誕生了memcached
web1.0 2005以前 企業(yè)提供內(nèi)容為主。
web2.0 2005-2012 企業(yè)只提供平臺(tái),用戶參與上傳和下載內(nèi)容。
目標(biāo):
解決高并發(fā)訪問的問題,減輕傳統(tǒng)數(shù)據(jù)庫(kù)MySQL的壓力。
不關(guān)注數(shù)據(jù)可靠性,只關(guān)心高并發(fā)讀寫。
差異化發(fā)展。
企業(yè)應(yīng)用場(chǎng)景:
1、數(shù)據(jù)庫(kù)前端的緩存
讀數(shù)據(jù): 開發(fā)程序從邏輯上,首先訪問memcached。如果memcached沒有所需要的數(shù)據(jù)在訪問mysql。
寫數(shù)據(jù): 如果在寫數(shù)據(jù)庫(kù)的同時(shí),把數(shù)據(jù)庫(kù)寫入到memcached?;蛘邔懭雖ysql的同時(shí),由mysyl復(fù)制到memcached。
linux運(yùn)維角色,搭建memcached服務(wù),提供服務(wù)(使用的信息問開發(fā))
2、集群后端的共享會(huì)話服務(wù)session
session門票。如果在網(wǎng)站內(nèi)有了這個(gè)門票,就可以瀏覽任意界面。
解決共享會(huì)話的方案:
1)nginx的調(diào)度算法IP_hash(缺點(diǎn):導(dǎo)致負(fù)載不均衡)
2)通過memcached做會(huì)話共享。
3)cookies(放在用戶瀏覽器端)優(yōu)點(diǎn):可以大并發(fā)。缺點(diǎn):容易篡改,不安全。
搭建memcached服務(wù)
1、libevent(epoll模型,libevent作為事件通知機(jī)制)
yum install libevent-devel -y
rpm -qa libevent-devel
2、下載memcached
yum install memcached -y
rpm -qa memcached
3、啟動(dòng)服務(wù)并檢查
[root@db01 ~]# memcached -m 16m -c 2048 -uroot -p 11211 -d
-m 指定內(nèi)存 -c 多少訪問連接 -u 指定用戶 -p 指定端口號(hào) -d 以守護(hù)進(jìn)程的方式
[root@db01 ~]# netstat -lntp|grep memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 4026/memcached
tcp 0 0 :::11211 :::* LISTEN 4026/memcached
MySQL數(shù)據(jù)庫(kù)管理 | Memcached管理 |
MySQL的insert語(yǔ)句 | Memcached的set命令 |
MySQL的select語(yǔ)句 | Memcached的get命令 |
MySQL的delete語(yǔ)句 | Memcached的delete命令 |
操作Memcached的相關(guān)命令的語(yǔ)法
以下為操作Memcached的相關(guān)命令基本語(yǔ)法:
set key 0 0 0
<command name> <key> <flags> <exptime> <bytes>\r
<datablock>\r
<status>\r
命令 | 說明 |
command name | set無(wú)論如何都進(jìn)行寫入數(shù)據(jù),會(huì)覆蓋老數(shù)據(jù) add只有對(duì)應(yīng)數(shù)據(jù)不存在時(shí)才添加數(shù)據(jù) repalce只有數(shù)據(jù)存在時(shí)進(jìn)行替換數(shù)據(jù) append往后追加:append<key>datablock<status>? prepend往前追加:prepend<key>datablock<status> cas按版本號(hào)更改 |
key | 普通字符串,要求小于250個(gè)字符,不包含空格和控制字符 |
flags | 客戶端用來標(biāo)識(shí)數(shù)據(jù)格式的數(shù)值,如json、xml、壓縮等 |
exptime | 存活時(shí)間s,0為永遠(yuǎn),小于30天,60*60*24*30為秒數(shù) 大于30天為unixtime |
bytes | byte字節(jié)數(shù),不包含\r\n,根據(jù)長(zhǎng)度截取存/取的字符串,可以是0,即存空串 |
datablock | 文本行,以\r\n結(jié)尾,當(dāng)然可以包含\r或 |
status | STORED/NOT_FOUND |
下載telnet和 nc包
yum install telnet nc -y
telnet方式
存進(jìn)去 拿出來 刪除掉
[root@web03 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set k1 0 0 6
oldboy
STORED
get k1
VALUE k1 0 6
oldboy
END
delete k1
DELETED
用nc方式
[root@web03 ~]# printf "set key008 0 06\r\noldboy\r\n"|nc 127.0.0.1 11211
STORED
用printf方式查看
printf "get key008\r\n"|nc127.0.0.1 11211
刪除
printf "delete key008\r\n"|nc127.0.0.1 11211
三種 寫入 讀取刪除
[root@web03 ~]#printf "set key008 0 0 6\r\noldboy\r\n"|nc 127.0.0.1 11211
STORED
[root@web03 ~]# printf"get key008\r\n"|nc 127.0.0.1 11211
VALUE key008 0 6
oldboy
END
[root@web03 ~]# printf"delete key008\r\n"|nc 127.0.0.1 11211
DELETED
memcached查看幫助
memcached -h
Memcached啟動(dòng)命令相關(guān)參數(shù)
命令參數(shù) | 說明 |
進(jìn)程與連接設(shè)置: | |
-d | 以守護(hù)進(jìn)程(daemon)方式運(yùn)行服務(wù) |
-u | 指定運(yùn)行Memcached的用戶,如果當(dāng)前用戶為root,需要使用此參數(shù)指定用戶 |
-l | 指定Memcached進(jìn)程監(jiān)聽的服務(wù)器IP地址,可以不設(shè)置此參數(shù) |
-p(小寫) | 指定Memcached服務(wù)監(jiān)聽TCP端口號(hào),默認(rèn)為11211 |
-P(大寫) | 設(shè)置保存Memcached的pod文件($$),保存PID到指定文件 |
內(nèi)存相關(guān)設(shè)置 | |
-m | 指定Memcached服務(wù)可以緩存數(shù)據(jù)的最大內(nèi)存,默認(rèn)為64MB |
-M | Memcached服務(wù)內(nèi)存不夠時(shí)禁止LRU,如果內(nèi)存滿了會(huì)報(bào)錯(cuò) |
-f | chunk size增長(zhǎng)因予,默認(rèn)1.25 |
-L | 啟用大內(nèi)存頁(yè),可以降低內(nèi)存浪費(fèi),改進(jìn)性能 |
并發(fā)連接設(shè)置 | |
-c | 最大的并發(fā)連接數(shù),默認(rèn)是1024 |
-t | 線程數(shù),默認(rèn)4.由于Memcached采用的是NIO,所以太多線程用處不大 |
-R | 每個(gè)event最大請(qǐng)求數(shù),默認(rèn)20 |
-C | 禁用CAS(可以禁止版本計(jì)數(shù),減少開銷) |
調(diào)試參數(shù) | |
-v | 打印較少的errors/warnings |
-vv | 打印非常多調(diào)試信息和錯(cuò)誤輸出到控制臺(tái),也打印客戶端命令及響應(yīng) |
-vvv | 打印極多的調(diào)試信息和錯(cuò)誤輸出,也打印內(nèi)部狀態(tài)轉(zhuǎn)變 |
php所在服務(wù)器上安裝memcached客戶端,程序才能訪問memcached
把memcache-2.2.5.tgz數(shù)據(jù)包拉到/home/oldboy/tools/
然后進(jìn)行編譯安裝
tar zxf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config
make
make install
cd ../
[root@web02 tools]# ll/application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/
total 256
-rwxr-xr-x 1 root root 258064 Jun 9 14:44 memcache.so
echo '<?php phpinfo(); ?>' >/application/nginx/html/blog/a.php
[root@web02 php]# cat /application/nginx/html/blog/a.php
<?php
phpinfo();
?>
通過頁(yè)面:blog.etiantian.org/a.php檢查mc的配置情況。
配置:
vim /application/php/lib/php.ini
extension_dir ="/application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/"
extension = memcache.so
重啟Php
pkill php-fpm
/application/php/sbin/php-fpm
再次通過頁(yè)面:blog.etiantian.org/a.php檢查mc的配置情況。ctrl + F
搜索memcache頁(yè)面內(nèi)容,如果有結(jié)果,表示成功。
管理memcachedweb端
把memadmin-1.0.12.tar.gz包拉進(jìn) /home/oldboy/tools/
tar zxvfC memadmin-1.0.12.tar.gz /application/nginx/html/blog/
進(jìn)行指定解壓
Memcached狀態(tài)信息詳細(xì)說明
參數(shù) | 值 | 描述 | 實(shí)際作用 |
pid | 28123 | memcache服務(wù)進(jìn)程ID | 查看服務(wù)信息 |
uptime | 20063728 | 服務(wù)已運(yùn)行秒數(shù) | |
time | 1440577412 | 服務(wù)當(dāng)前Unix時(shí)間戳 | |
version | 1.4.4 | Memcache版本 | |
libevent | 1.4.13-stable | libevent版本 | |
pointer_size | 64 | 操作系統(tǒng)指針大小 | |
rusage_user | 645314.961214 | 進(jìn)程累計(jì)用戶時(shí)間 | 分析占用CPU的情況 |
rusage_system | 1134305.468357 | 進(jìn)程累計(jì)系統(tǒng)時(shí)間 | |
cuur_connections | 1361 | 當(dāng)前連接數(shù) | 分析連接數(shù)情況 |
total_connections | 18299935 | Memcached運(yùn)行以來連接總數(shù) | |
connection_structures | 12455 | Memcached分配的連接結(jié)構(gòu)數(shù)量 | |
reserved_fds | 20 | 內(nèi)部使用的FD數(shù) | |
cmd_get | 60424570825 | get命令請(qǐng)求次數(shù) | 分析命令率情況 |
get_hits | 58105159197 | get命令命中次數(shù) | |
get_misses | 2319411628 | get命令未命中次數(shù) | |
curr_items | 24628253 | 當(dāng)前的對(duì)象數(shù)目 | 分析對(duì)象數(shù)LRU頻率 |
total_items | 854196259 | 當(dāng)前存儲(chǔ)占用的字節(jié)數(shù) | |
evictions | 7509 | LRU釋放的對(duì)象數(shù)目 |
現(xiàn)在的Memcached是利用Slab Allocation機(jī)制來分配和管理內(nèi)存的,過程如下:
1)提前將大內(nèi)存分配大小為1MB的若干個(gè)slab,然后針對(duì)每個(gè)slab再進(jìn)行小對(duì)象填充,這個(gè)小對(duì)象稱為chunk,避免大量重復(fù)的初始化和清理,減輕了內(nèi)存管理器的負(fù)擔(dān)。
Slab Allocation 內(nèi)存分配的原理是按照預(yù)先規(guī)定的大小,將分配給Memcached服務(wù)的內(nèi)存預(yù)先分割成特定長(zhǎng)度的內(nèi)存塊(chunk),再把尺寸相同的內(nèi)存塊(chunk)分成組(chunks slab class),這些內(nèi)存塊不會(huì)釋放,可以重復(fù)利用。
2)新增數(shù)據(jù)對(duì)象存儲(chǔ)說明。
Memcached服務(wù)器中保存著slab內(nèi)空閑chunk的列表,它會(huì)根據(jù)該列表選擇chunk,然后將數(shù)據(jù)緩存于其中。當(dāng)有數(shù)據(jù)存入時(shí),Memcached根據(jù)接收到的數(shù)據(jù)大小,選擇最合適數(shù)據(jù)大小的slab,分配一個(gè)能存下這個(gè)數(shù)據(jù)的最小內(nèi)存塊(chunk)。例如:有100字節(jié)的一個(gè)數(shù)據(jù),就會(huì)被分配存入下面的112字節(jié)的一個(gè)內(nèi)存塊中,這樣會(huì)有12字節(jié)被浪費(fèi)掉,這部分空間就不能被使用了,這也是SlabAllocator機(jī)制的一個(gè)缺點(diǎn)。
需要被緩存的數(shù)據(jù)以key/value鍵值對(duì)的形式保存在服務(wù)器端
網(wǎng)頁(yè)名稱:內(nèi)存緩存軟件memcached
轉(zhuǎn)載來于:http://jinyejixie.com/article20/iehpco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)