亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Memcache學(xué)習(xí)筆記

系統(tǒng) 1899 0

目錄索引:1.概念

? ? ? ? ? ? ? 2.安裝并使用memcached

? ? ? ? ? ? ? 3.對(duì)memcached進(jìn)行curd操作

????????????? 4.用memcache擴(kuò)展操作Memcached

????????????? 5.memcached機(jī)制深入理解

????????????? 6.memcache的細(xì)節(jié)

1.概念

Memcached是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),目前全世界不少人使用這個(gè)緩存項(xiàng)目來(lái)構(gòu)建自己大負(fù)載的網(wǎng)站,來(lái)分擔(dān)數(shù)據(jù)庫(kù)的壓力,通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來(lái)存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說(shuō)就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。相關(guān)網(wǎng)站: http://danga.com/ ? http://memcached.org

2.安裝并使用memcached

(1).下載memcached軟件

(2).運(yùn)行cmd命令,切換到memcached.exe目錄,運(yùn)行memecache.exe -d install

(3).啟動(dòng)memcached

第一種方法:到【控制面板/服務(wù)】里啟動(dòng)

第二種方法:cmd到memcached目錄,運(yùn)行memcached.exe -d start

(4)用netstat -an查看11211端口是否在監(jiān)聽(tīng),如果在監(jiān)聽(tīng),說(shuō)明啟動(dòng)成功。

(補(bǔ)充:1.用netstat -anb可以看11211端口是哪個(gè)程序在監(jiān)聽(tīng),同時(shí)可以看到那些用戶連接到我們的服務(wù)器 2.有名的端口1-1024 apache:80 mysql:3306 ftp:21 ssh:22 oracle:1521 stmp:25)

3.使用telnet連接到memcached服務(wù)

telnet 127.0.0.1 11211

如果不能使用telnet命令,拷貝一個(gè)telnet.exe放到c:/windows/system32就OK。

(1) 增加

基本語(yǔ)法:add key名 0 (存放時(shí)間)數(shù)據(jù)大小

例:add key1 0 30 5

hello

(2)獲取

基本語(yǔ)法:get key名

例:get key1

(3)修改

方式1:set key名 0 存放時(shí)間 數(shù)據(jù)大小

方式2:replace key名 0 存放時(shí)間 數(shù)據(jù)大小

例:set key100 0 70 6

ssssss

(4)刪除

基本語(yǔ)法:delete key名

例:delete key300

(補(bǔ)充:1.查看狀態(tài)stats 命中率cmd_set/cmd_get 2.清空內(nèi)存數(shù)據(jù)flush_all 3.操作Memcached命令: http://wenku.baidu.com/link?url=2roCXD80HRkrRZ9prNXvTOeI15Tl4-w8l-JoJUmzti0S_Mp0EQJwaouiYOoIK0-1zT2CZHN54XehrUFo6r9W8Aqka4NQ4LmcuWeLoqZ17sa

4.用memcache擴(kuò)展操作Memcached

(1)安裝配置

①拷貝一個(gè)php_memcache.dll至php的ext目錄

②在php.ini開(kāi)啟php_memcache.dll擴(kuò)展

③重啟apache

(2)操作

代碼:

      
         1
      
      
        //
      
      
        連接memcache服務(wù)器
      
      
         2
      
      
        $mem
      
       = 
      
        new
      
      
         Memcache();


      
      
         3
      
      
        if
      
      (!
      
        $mem
      
      ->connect('localhost',11211
      
        )) {


      
      
         4
      
      
        die
      
      ('connect error!'
      
        );


      
      
         5
      
      
            }


      
      
         6
      
      
        //
      
      
        增加
      
      
         7
      
      
        if
      
      (
      
        $mem
      
      ->set('key1','val1',MEMCACHE_COMPRESSED,60
      
        )) {


      
      
         8
      
      
        echo
      
       'add ok!'
      
        ;


      
      
         9
      
      
            }


      
      
        10
      
      
        $arr
      
       = 
      
        array
      
      ('moushu','yunshu'
      
        );


      
      
        11
      
      
        if
      
      (
      
        $mem
      
      ->set('arr',
      
        $arr
      
      ,MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        12
      
      
        echo
      
       'add ok!'
      
        ;


      
      
        13
      
      
            }


      
      
        14
      
      
        class
      
      
         Dog {


      
      
        15
      
      
        public
      
      
        $name
      
      
        ;


      
      
        16
      
      
        public
      
      
        $age
      
      
        ;


      
      
        17
      
      
            }


      
      
        18
      
      
        $dog
      
       = 
      
        new
      
      
         Dog();


      
      
        19
      
      
        if
      
      (
      
        $mem
      
      ->set('dog',
      
        $dog
      
      ,MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        20
      
      
        echo
      
       'add ok!'
      
        ;


      
      
        21
      
      
            }


      
      
        22
      
      
        $null_val
      
       = 
      
        null
      
      
        ;


      
      
        23
      
      
        if
      
      (
      
        $mem
      
      ->set('null_val',
      
        $null_val
      
      ,MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        24
      
      
        echo
      
       'add ok!'
      
        ;


      
      
        25
      
      
            }


      
      
        26
      
      
        $bool_val
      
       = 
      
        null
      
      
        ;


      
      
        27
      
      
        if
      
      (
      
        $mem
      
      ->set('bool_val',
      
        false
      
      ,MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        28
      
      
        echo
      
       'add ok!'
      
        ;


      
      
        29
      
      
            }


      
      
        30
      
      
        $handle
      
       = 
      
        fopen
      
      ('2.php','a'
      
        );


      
      
        31
      
      
        if
      
      (
      
        $mem
      
      ->set('res',
      
        $handle
      
      ,MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        32
      
      
        echo
      
       'add res ok!'
      
        ;


      
      
        33
      
      
            }


      
      
        34
      
      
        if
      
      (
      
        $mem
      
      ->set('name','luoyunshu',MEMCACHE_COMPRESSED,30*3600*24
      
        )) {


      
      
        35
      
      
        echo
      
       'add name ok!'
      
        ;


      
      
        36
      
           }  
      
        //
      
      
        存儲(chǔ)30天
      
      
        37
      
      
        if
      
      (
      
        $mem
      
      ->set('name2','moushu',MEMCACHE_COMPRESSED,
      
        time
      
      ()+31*3600*24
      
        )) {


      
      
        38
      
      
        echo
      
       'add name2 ok!'
      
        ;


      
      
        39
      
           }   
      
        //
      
      
        存儲(chǔ)31天


      
      
        40
      
      
        41
      
      
            //修改
      
      
        42
      
      
        if
      
      (
      
        $mem
      
      ->replace('key1','hello',MEMCACHE_COMPRESSED,60
      
        )) {


      
      
        43
      
      
        echo
      
       'add ok!'
      
        ;


      
      
        44
      
      
            }


      
      
        45
      
      
        46
      
      
        //
      
      
        刪除
      
      
        47
      
      
        if
      
      (
      
        $mem
      
      ->delete('key1'
      
        )) {


      
      
        48
      
      
        echo
      
       'del ok!'
      
        ;


      
      
        49
      
      
            }


      
      
        50
      
      
        51
      
      
        //
      
      
        查詢
      
      
        52
      
      
        $val
      
       = 
      
        $mem
      
      ->get('key1'
      
        );


      
      
        53
      
      
        echo
      
      
        $val
      
      
        ;


      
      
        54
      
      
        $val
      
       = 
      
        $mem
      
      ->get('arr'
      
        );


      
      
        55
      
      
        var_dump
      
      (
      
        $val
      
      
        );


      
      
        56
      
      
        $dog
      
       = 
      
        $mem
      
      ->get('dog');   
      
        //
      
      
        取對(duì)象時(shí)要先聲明類定義
      
      
        57
      
      
        var_dump
      
      (
      
        $dog
      
      
        );


      
      
        58
      
      
        $null_val
      
       = 
      
        $mem
      
      ->get('null_val'
      
        );   


      
      
        59
      
      
        var_dump
      
      (
      
        $null_val
      
      );  
      
        //
      
      
        null
      
      
        60
      
      
        $bool_val
      
       = 
      
        $mem
      
      ->get('bool_val'
      
        );  


      
      
        61
      
      
        var_dump
      
      (
      
        $bool_val
      
      );  
      
        //
      
      
        ''
      
      
        62
      
      
        $res
      
       = 
      
        $mem
      
      ->get('res'
      
        );


      
      
        63
      
      
        var_dump
      
      (
      
        $res
      
      );   
      
        //
      
      
        0
      
      
        64
      
      
        $res
      
       = 
      
        $mem
      
      ->get('key1'
      
        );


      
      
        65
      
      
        var_dump
      
      (
      
        $res
      
      
        );   


      
      
        66
      
      
        $name
      
       = 
      
        $mem
      
      ->get('name'
      
        );


      
      
        67
      
      
        var_dump
      
      (
      
        $name
      
      
        ); 


      
      
        68
      
      
        $name2
      
       = 
      
        $mem
      
      ->get('name2'
      
        );


      
      
        69
      
      
        var_dump
      
      (
      
        $name2
      
      );   
      
        //
      
      
        moushu
      
    

?5.memcached機(jī)制深入理解

(1)基于c/s架構(gòu) ,協(xié)議簡(jiǎn)單

?● c/s架構(gòu),此時(shí)memcached為服務(wù)器端,我們可以使用如PHP,c/c++等程序連接memcached服務(wù)器。

?● memcached的服務(wù)器客戶端通信并不使用XML等格式,而使用簡(jiǎn)單的基于文本行的協(xié)議。因此,通過(guò)telnet也能在memcached上保存數(shù)據(jù)、取得數(shù)據(jù)

?(2)基于libevent的事件處理

?● libevent是一套跨平臺(tái)的事件處理接口的封裝,能夠兼容包括這些操作系統(tǒng): Windows/Linux/BSD/Solaris 等操作系統(tǒng)的的事件處理。

?● Memcached 使用libevent來(lái)進(jìn)行網(wǎng)絡(luò)并發(fā)連接的處理,能夠保持在很大并發(fā)情況下,仍舊能夠保持快速的響應(yīng)能力。

?(3)內(nèi)置內(nèi)存存儲(chǔ)方式

?● 為了提高性能,memcached中保存的數(shù)據(jù)都存儲(chǔ)在memcached內(nèi)置的內(nèi)存存儲(chǔ)空間中。由于數(shù)據(jù)僅存在于內(nèi)存中,因此重啟memcached、重啟操作系統(tǒng)會(huì)導(dǎo)致全部數(shù)據(jù)消失。另外,內(nèi)容容量達(dá)到指定值之后,就基于LRU(Least Recently Used)算法自動(dòng)刪除不使用的緩存。memcached本身是為緩存而設(shè)計(jì)的服務(wù)器,因此并沒(méi)有過(guò)多考慮數(shù)據(jù)的永久性問(wèn)題。

?(4)基于客戶端的分布式

?● memcached盡管是“分布式”緩存服務(wù)器,但服務(wù)器端并沒(méi)有分布式功能。各個(gè)memcached不會(huì)互相通信以共享信息。

代碼:

      
         1
      
      
        //
      
      
        連接memcache服務(wù)器,啟動(dòng)兩個(gè)服務(wù)器 (memcached.exe -p 9999
      
      
         2
      
      
        $mem
      
       = 
      
        new
      
      
         Memcache();


      
      
         3
      
      
        if
      
      (!
      
        $mem
      
      ->addServer('localhost',11211
      
        )) {


      
      
         4
      
      
        die
      
      ('connect server1 error!'
      
        );


      
      
         5
      
           } 
      
        //
      
      
        serv1
      
      
         6
      
      
        if
      
      (!
      
        $mem
      
      ->addServer('localhost',9999
      
        )) {


      
      
         7
      
      
        die
      
      ('connect server2 error!'
      
        );


      
      
         8
      
           } 
      
        //
      
      
        serv2


      
      
         9
      
      
        10
      
      
            //將數(shù)據(jù)放入哪個(gè)memcache服務(wù)器,由客戶端的mem對(duì)象決定


      
      
        11
      
      
            //當(dāng)執(zhí)行addServer的時(shí)候,并不是立即去連接mem服務(wù),而是通過(guò)計(jì)算,hash后采取決定連接哪個(gè)mem服務(wù),因此當(dāng)你大量加入服務(wù)器到連接池時(shí)并沒(méi)有多余的開(kāi)銷。
      
      
        12
      
      
        if
      
      (
      
        $mem
      
      ->set('key1','val1',MEMCACHE_COMPRESSED,120
      
        )) {


      
      
        13
      
      
        echo
      
       'add key1 ok!'
      
        ;


      
      
        14
      
           } 
      
        //
      
      
        放在serv1
      
      
        15
      
      
        if
      
      (
      
        $mem
      
      ->set('key2','val2',MEMCACHE_COMPRESSED,120
      
        )) {


      
      
        16
      
      
        echo
      
       'add key2 ok!'
      
        ;


      
      
        17
      
           } 
      
        //
      
      
        放在serv2
      
      
        18
      
      
        if
      
      (
      
        $mem
      
      ->set('key3','val3',MEMCACHE_COMPRESSED,120
      
        )) {


      
      
        19
      
      
        echo
      
       'add key3 ok!'
      
        ;


      
      
        20
      
           } 
      
        //
      
      
        放在serv1
      
      
        21
      
      
        22
      
      
        $res1
      
       = 
      
        $mem
      
      ->get('key1'
      
        );


      
      
        23
      
      
        $res2
      
       = 
      
        $mem
      
      ->get('key2'
      
        );


      
      
        24
      
      
        $res3
      
       = 
      
        $mem
      
      ->get('key3'
      
        );


      
      
        25
      
      
        echo
      
      
        $res1
      
      
        ;


      
      
        26
      
      
        echo
      
      
        $res2
      
      
        ;


      
      
        27
      
      
        echo
      
      
        $res3
      
      ;
    

?6.memcache的細(xì)節(jié)
(1)生命周期

?從數(shù)據(jù)放入memcache開(kāi)始計(jì)時(shí),直到時(shí)間到了,就銷毀,如果時(shí)間為0,則表示不過(guò)期。memcache的數(shù)據(jù)被銷毀情況有:1.時(shí)間到了 ②重啟memcached服務(wù) ③delete掉了

?(2)將 session數(shù)據(jù) 放入 memcached

??? ①.配置:

??? 第一種方法:修改php.ini 文件,修改如下:

????? save-handler=memcache

???? session.save_path?=?"tcp://localhost:11211"

??? 第二種方法,使用ini_set()

??? ini_set('session.save_handler','memcache');

??? ini_set('session.save_path','tcp://localhost:11211');

??? 一些說(shuō)明: memcached 主要的目的是提速,數(shù)據(jù)不和用戶綁定(session數(shù)據(jù)存入memcache中以session id作為鍵值,任何可訪問(wèn)memcache的人都可以取到值)。 session 數(shù)據(jù)和用戶綁定,更安全。

?(3) memcached 安全性

?? 通過(guò)啟用防火墻來(lái)防止外網(wǎng)訪問(wèn) memcached 服務(wù),保證 memcached 的安全。 linux系統(tǒng)設(shè)置防火墻的命令:iptables?-a?input?-p?tcp?-s?127.0.0.1?-dport?11211?-j?ACCEPT

?(4)樣的數(shù)據(jù)適合放入 memcache 中?

?? 變化頻繁,具有不穩(wěn)定的數(shù)據(jù),不需要實(shí)時(shí)入庫(kù)(比如用戶在線狀態(tài)、在線人數(shù) .... ),想加快用戶訪問(wèn)應(yīng)用的速度。大數(shù)據(jù),如圖片、視頻不適合放入memcache中。

? 到這,時(shí)間再完善.....

?

Memcache學(xué)習(xí)筆記


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久热免费 | 两性影院| 中文字幕一区二区三区视频在线 | 久久国产精品亚洲一区二区 | 国产欧美日韩在线观看 | 欧美亚洲大片 | 看真人视频一一级毛片 | 成年人性生活免费视频 | 狠狠躁夜夜躁人人爽天天miya | 久久网免费 | 四虎影视精品永久免费 | 91亚洲精品国产第一区 | 亚洲精品国产精品国自产观看 | 久久www免费人成_看片美女图 | 欧美午夜在线观看 | 亚洲人人精品 | 国产日产欧产麻豆精品精品推荐 | 日韩 欧美 亚洲国产 | 国产无套乱子伦精彩是白视频 | 日韩视频在线观看一区二区 | 奇米网在线视频 | 国产精品嫩草研究所永久网址 | 欧美日韩在线观看区一二 | 国产精品欧美亚洲韩国日本99 | 欧美亚洲国产成人高清在线 | 国产精品午夜性视频 | 四虎2022| 大色香蕉色视频大全 | 欧美日韩看片 | 国产三级精品三级男人的天堂 | 99热精品成人免费观看 | 亚洲人和日本人jzz护士 | 成人在线免费观看 | 国产亚洲午夜精品a一区二区 | 人人爽天天碰天天躁夜夜躁 | 久久久受www免费人成 | 中文字幕在线观看免费视频 | 四虎影院永久在线观看 | 四虎国产成人永久精品免费 | 日本一级做人免费视频 | 国产亚洲精品一区二区在线观看 |