作者:燁竹
Memcache簡(jiǎn)介
Memcache是一個(gè)基于內(nèi)存的鍵值對(duì)的緩存系統(tǒng)教藻,具備讀寫(xiě)速度比較高的特性,同時(shí)支持分布式存儲(chǔ)
數(shù)據(jù)存儲(chǔ)內(nèi)存:Memcache將數(shù)據(jù)直接存儲(chǔ)在內(nèi)存中。因此內(nèi)存中數(shù)據(jù)容易丟失(服務(wù)器重啟會(huì)丟失數(shù)據(jù))
鍵值對(duì):例如PHP中數(shù)組 通過(guò)名稱(chēng)就可以找到對(duì)應(yīng)的數(shù)據(jù)
緩存系統(tǒng):臨時(shí)存儲(chǔ)數(shù)據(jù)的介質(zhì)。最終在數(shù)據(jù)庫(kù)中一定會(huì)存在對(duì)應(yīng)的數(shù)據(jù)作為一個(gè)備份
分布式存儲(chǔ):每一個(gè)只存儲(chǔ)一部分?jǐn)?shù)據(jù)寨腔。對(duì)于memcache嚴(yán)格上自己本身是不支持分布式存儲(chǔ),是借助于第三方的擴(kuò)展實(shí)現(xiàn)分布式存儲(chǔ)
memcache安裝
①創(chuàng)建memcache根目錄
②拷貝memcache的安裝包文件
③使用<u>超級(jí)管理員</u>打開(kāi)cmd進(jìn)入memcache目錄
④以非服務(wù)器的方式安裝memcache
此時(shí)為非服務(wù)的方式安裝啟動(dòng)memcache目前cmd處于掛起狀態(tài)不能正常操作
⑤以服務(wù)方式安裝memcache
安裝之后在自己計(jì)算機(jī)的服務(wù)中查看結(jié)果
⑥啟動(dòng)memcache服務(wù)
找到memcache的服務(wù)點(diǎn)擊啟動(dòng)
或者使用cmd命令實(shí)現(xiàn)
memcache的相關(guān)參數(shù)
-p:指定memcache TCP協(xié)議的通信端口 默認(rèn)為11211端口
-d :start/stop 用于啟動(dòng)或者關(guān)閉嗎memcache
-d: install/uninstall:將memcache安裝服務(wù)或者卸載服務(wù)
-u:指定用戶(hù) 在Linux下使用
-m:指定memcache最大使用的內(nèi)存 默認(rèn)為64M
-c:指定memcache最大的并發(fā)數(shù) 默認(rèn)為1024
memcache.exe -help
memcache常用的操作指令
memcache支持TCP協(xié)議的通信數(shù)據(jù)操作可以使用Telnet工具率寡,所以這一些指令在Telnet工具中完成迫卢;Telnet工具用法:http://www.reibang.com/p/6c80a53c0b66
1、set指令
作用:設(shè)置數(shù)據(jù)
語(yǔ)法:set 鍵名 0|1(是否壓縮) 0(有效時(shí)間0代表不過(guò)期) 3(內(nèi)容的長(zhǎng)度)(注意寫(xiě)完長(zhǎng)度需要回車(chē))
鍵名:一個(gè)名稱(chēng)標(biāo)識(shí)冶共,此標(biāo)識(shí)有要求最多250個(gè)字符乾蛤。對(duì)于使用鍵名建議簡(jiǎn)短并且能表示含義 例如user_info_id_2
是否壓縮:
0不壓縮:直接將內(nèi)容原生存儲(chǔ),此方式內(nèi)存是的使用空間比較大(空間換時(shí)間)
1壓縮:將內(nèi)容按照規(guī)則壓縮為更小然后存儲(chǔ)捅僵,使用壓縮可以節(jié)省內(nèi)存空間但是相對(duì)于不壓縮在操作上會(huì)略慢(時(shí)間換空間)
有效時(shí)間:0代表不過(guò)期一般永遠(yuǎn)有效家卖。可以設(shè)置為一個(gè)具體秒數(shù)表示多少秒之后過(guò)期庙楚。在實(shí)際項(xiàng)目中一般對(duì)于此值都會(huì)設(shè)置一個(gè)過(guò)期的時(shí)間
內(nèi)容長(zhǎng)度:一定要按照具體的內(nèi)容的字符數(shù)編寫(xiě)長(zhǎng)度
值:寫(xiě)入到內(nèi)存中的數(shù)據(jù) 最大只能為1M
①案例一
②案例二
Set一個(gè)不存在的key會(huì)創(chuàng)建該key 設(shè)置一個(gè)已經(jīng)存在的會(huì)修改對(duì)應(yīng)的值篡九,即set的作用(添加與修改)
③案例三
此時(shí)表示age這個(gè)可用有效時(shí)間只有30秒,一旦30秒一到就不能讀取數(shù)據(jù)(失效)
2醋奠、get指令
作用:讀取數(shù)據(jù)
語(yǔ)法:get 鍵名稱(chēng)
3榛臼、add指令
作用:給key設(shè)置數(shù)據(jù),只能針對(duì)一個(gè)不存在的key進(jìn)行設(shè)置(add只能添加不能修改)
語(yǔ)法:語(yǔ)法同set
4窜司、delete指令
作用:刪除key
語(yǔ)法:delete 鍵名
5沛善、incr指令
作用:設(shè)置自增長(zhǎng)
語(yǔ)法 incr 鍵名 增加的數(shù)字
6、decr指令
作用:自減
語(yǔ)法:同incr
7塞祈、flush_all指令
作用:清空memcache中所有數(shù)據(jù)
語(yǔ)法:flush_all
此命令只能在測(cè)試中使用金刁。
8、stats指令
作用:查看memcache狀態(tài)
Memcache命中率=get_hits/cmd_get*100%
一般命中率在70-90之間勉強(qiáng)可以接受议薪。
PHP操作memcache
注意:PHP對(duì)于memcache擴(kuò)展有兩套尤蛮。另外一套為memcached擴(kuò)展
1、php開(kāi)啟memcache擴(kuò)展
①下載Windows下的PHP擴(kuò)展(php7)
下載地址:https://github.com/keyesone66/php7_memcache.dell.git聲明這是偷的別人的版本庫(kù)里面的內(nèi)容斯议,不會(huì)做更新产捞,本人只做收藏;來(lái)源:https://github.com/nono303/PHP7-memcache-dll
具體下載時(shí)需要注意 使用的編譯器(VC14)哼御、是否線程安裝(ts/nts)坯临、PHP的版本。所有信息都可以通過(guò)PHPinfo查看
②php.ini查看擴(kuò)展目錄
③將擴(kuò)展文件拷貝到擴(kuò)展目錄下
④php.ini修改PHP的配置文件使用擴(kuò)展
⑤重啟再次查看phpinfo
⑥測(cè)試
memcache支持的數(shù)據(jù)類(lèi)型
memcache對(duì)于PHP中的數(shù)據(jù)類(lèi)型除了資源之外其他的都可以支持使用(由于資源變量經(jīng)過(guò)序列化與反序列化之后結(jié)果變化)恋昼,從本質(zhì)上memcache支持的數(shù)據(jù)類(lèi)型只有一種--字符串的數(shù)據(jù)類(lèi)型看靠;
下面具體詳解:
基本數(shù)據(jù)類(lèi)型:布爾,整型,字符串,浮點(diǎn);支持所有液肌;
復(fù)合數(shù)據(jù)類(lèi)型:數(shù)組,對(duì)象;支持所有
特殊數(shù)據(jù)類(lèi)型:NULL挟炬,資源;簡(jiǎn)單理解
使用telnet客戶(hù)端查看數(shù)據(jù)
從上述結(jié)果可知嗦哆,memcache中所存儲(chǔ)的數(shù)組格式及對(duì)象格式的數(shù)據(jù)在memcache中都是經(jīng)過(guò)序列化之后的字符串谤祖。從嚴(yán)格上說(shuō)memcache只支持字符串格式的數(shù)據(jù);對(duì)于PHP中的特殊數(shù)據(jù)類(lèi)型只有空可以支持;
memcache管理工具
下載:$ git clone https://github.com/junstor/memadmin.git
memcache使用
三種使用場(chǎng)景:作為緩存系統(tǒng),Session共享吝秕,作為分布式存儲(chǔ)數(shù)據(jù)
作為緩存使用
1泊脐、讀取數(shù)據(jù)時(shí)先讀取緩存系統(tǒng)中的內(nèi)容,有則直接使用否則在讀取數(shù)據(jù)庫(kù)獲取原始數(shù)據(jù)然后在寫(xiě)入到緩存系統(tǒng)中
2烁峭、當(dāng)數(shù)據(jù)發(fā)生變化修改原始數(shù)據(jù)之后需要將緩存中的內(nèi)容進(jìn)行更新
案例一:用戶(hù)信息緩存
考慮當(dāng)用戶(hù)登錄完成之后會(huì)經(jīng)常使用用戶(hù)的一起信息因此可以在用戶(hù)登錄完成之后將信息緩存到memcache中
①當(dāng)用戶(hù)登錄完成設(shè)置數(shù)據(jù)
②使用緩存
后期可以在任何想要使用用戶(hù)信息的地方直接讀取memcache中的內(nèi)容容客。例如member控制器中使用用戶(hù)信息
案例二:商品關(guān)注功能實(shí)現(xiàn)
①添加關(guān)注
②查看關(guān)注的商品
分布式存儲(chǔ)
1.memcache中分布式存儲(chǔ)
每臺(tái)memcache服務(wù)器中只保存一部分?jǐn)?shù)據(jù)
2、Linux搭建memcache服務(wù)
http://www.reibang.com/p/7f185ad792b4
實(shí)現(xiàn)memcache分布式存儲(chǔ)
①關(guān)閉Linux下的防火墻
systemctl restart iptables.service
②創(chuàng)建代碼實(shí)現(xiàn)分布式存儲(chǔ)
<?php
$obj =new Memcache();
$obj -> addServer('127.0.0.1',11211);
$obj -> addServer('192.168.139.128',11211);
$obj->set('age1',1);
$obj->set('age2',2);
$obj->set('age3',3);
$obj->set('age4',4);
$obj->set('age5',5);
$obj->set('age6',6);
/*$obj -> connect('127.0.0.1',11211);
$res =$obj->set('keyname','keyvalue',0,0);
var_dump($res);*/
?>
③查看數(shù)據(jù)結(jié)果
192.168.116.135中的數(shù)據(jù)
關(guān)于memcache的分布式的存儲(chǔ)是由PHP的擴(kuò)展實(shí)現(xiàn)约郁,會(huì)根據(jù)服務(wù)器已經(jīng)具體的key的名稱(chēng)準(zhǔn)確的定位具體數(shù)據(jù)存儲(chǔ)的位置
Memcache分布式:可以擴(kuò)充單memcache服務(wù)器存儲(chǔ)上線并且也可以解決并發(fā)問(wèn)題
memcache存儲(chǔ)session
1.1缩挑、session的存儲(chǔ)方式
1、session默認(rèn)存儲(chǔ)在文件中
2鬓梅、Session存儲(chǔ)到數(shù)據(jù)庫(kù)中
3供置、使用memcache存儲(chǔ)session信息
1.2、文件存儲(chǔ)方式(默認(rèn)方式)
優(yōu)點(diǎn):任何操作系統(tǒng)都可以支持此方式
缺點(diǎn):速度相對(duì)比較慢绽快。負(fù)載均衡項(xiàng)目下不能使用
1.3芥丧、數(shù)據(jù)庫(kù)的存儲(chǔ)方式
優(yōu)點(diǎn):速度相對(duì)文件提升并且解決了負(fù)載的問(wèn)題
缺點(diǎn):增加數(shù)據(jù)庫(kù)的壓力
1.4紧阔、memcache存儲(chǔ)session
優(yōu)點(diǎn):提升速度并且解決負(fù)載問(wèn)題 并且也減少了mysql的壓力
1.5、實(shí)現(xiàn)memcache存儲(chǔ)session
前置條件:需要有能夠正常工作的memcache服務(wù)器
1.5.1续担、方式一修改配置文件
①修改PHP的配置文件
②重啟apache
③編寫(xiě)代碼測(cè)試
訪問(wèn)測(cè)試
查看memcache中的內(nèi)容
1.5.2擅耽、方式二代碼中實(shí)現(xiàn)
對(duì)于方式一由于是直接修改配置文件回導(dǎo)致服務(wù)器下所有的項(xiàng)目的session都會(huì)寫(xiě)入到memcache中。
①還原session的存儲(chǔ)為默認(rèn)的文件方式
!](https://upload-images.jianshu.io/upload_images/11994491-ac9caa2aca463781.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
②重啟apache
③創(chuàng)建代碼測(cè)試
查看結(jié)果