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

Memcache學習筆記

系統 1620 0

目錄索引:1.概念

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

? ? ? ? ? ? ? 3.對memcached進行curd操作

????????????? 4.用memcache擴展操作Memcached

????????????? 5.memcached機制深入理解

????????????? 6.memcache的細節

1.概念

Memcached是一個高性能的分布式的內存對象緩存系統,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。相關網站: http://danga.com/ ? http://memcached.org

2.安裝并使用memcached

(1).下載memcached軟件

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

(3).啟動memcached

第一種方法:到【控制面板/服務】里啟動

第二種方法:cmd到memcached目錄,運行memcached.exe -d start

(4)用netstat -an查看11211端口是否在監聽,如果在監聽,說明啟動成功。

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

3.使用telnet連接到memcached服務

telnet 127.0.0.1 11211

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

(1) 增加

基本語法:add key名 0 (存放時間)數據大小

例:add key1 0 30 5

hello

(2)獲取

基本語法:get key名

例:get key1

(3)修改

方式1:set key名 0 存放時間 數據大小

方式2:replace key名 0 存放時間 數據大小

例:set key100 0 70 6

ssssss

(4)刪除

基本語法:delete key名

例:delete key300

(補充:1.查看狀態stats 命中率cmd_set/cmd_get 2.清空內存數據flush_all 3.操作Memcached命令: http://wenku.baidu.com/link?url=2roCXD80HRkrRZ9prNXvTOeI15Tl4-w8l-JoJUmzti0S_Mp0EQJwaouiYOoIK0-1zT2CZHN54XehrUFo6r9W8Aqka4NQ4LmcuWeLoqZ17sa

4.用memcache擴展操作Memcached

(1)安裝配置

①拷貝一個php_memcache.dll至php的ext目錄

②在php.ini開啟php_memcache.dll擴展

③重啟apache

(2)操作

代碼:

      
         1
      
      
        //
      
      
        連接memcache服務器
      
      
         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
      
           }  
      
        //
      
      
        存儲30天
      
      
        37
      
      
        if
      
      (
      
        $mem
      
      ->set('name2','moushu',MEMCACHE_COMPRESSED,
      
        time
      
      ()+31*3600*24
      
        )) {


      
      
        38
      
      
        echo
      
       'add name2 ok!'
      
        ;


      
      
        39
      
           }   
      
        //
      
      
        存儲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');   
      
        //
      
      
        取對象時要先聲明類定義
      
      
        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機制深入理解

(1)基于c/s架構 ,協議簡單

?● c/s架構,此時memcached為服務器端,我們可以使用如PHP,c/c++等程序連接memcached服務器。

?● memcached的服務器客戶端通信并不使用XML等格式,而使用簡單的基于文本行的協議。因此,通過telnet也能在memcached上保存數據、取得數據

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

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

?● Memcached 使用libevent來進行網絡并發連接的處理,能夠保持在很大并發情況下,仍舊能夠保持快速的響應能力。

?(3)內置內存存儲方式

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

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

?● memcached盡管是“分布式”緩存服務器,但服務器端并沒有分布式功能。各個memcached不會互相通信以共享信息。

代碼:

      
         1
      
      
        //
      
      
        連接memcache服務器,啟動兩個服務器 (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
      
      
            //將數據放入哪個memcache服務器,由客戶端的mem對象決定


      
      
        11
      
      
            //當執行addServer的時候,并不是立即去連接mem服務,而是通過計算,hash后采取決定連接哪個mem服務,因此當你大量加入服務器到連接池時并沒有多余的開銷。
      
      
        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的細節
(1)生命周期

?從數據放入memcache開始計時,直到時間到了,就銷毀,如果時間為0,則表示不過期。memcache的數據被銷毀情況有:1.時間到了 ②重啟memcached服務 ③delete掉了

?(2)將 session數據 放入 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');

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

?(3) memcached 安全性

?? 通過啟用防火墻來防止外網訪問 memcached 服務,保證 memcached 的安全。 linux系統設置防火墻的命令:iptables?-a?input?-p?tcp?-s?127.0.0.1?-dport?11211?-j?ACCEPT

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

?? 變化頻繁,具有不穩定的數據,不需要實時入庫(比如用戶在線狀態、在線人數 .... ),想加快用戶訪問應用的速度。大數據,如圖片、視頻不適合放入memcache中。

? 到這,時間再完善.....

?

Memcache學習筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产大片在线观看 | 天天干在线免费视频 | 99国产精品免费观看视频 | 岛国一级毛片 | 午夜亚洲 | 在线手机福利免费福利院 | 免费a一级毛片在线播放 | 亚洲色视频在线播放网站 | 国产爱久久久精品 | 日韩精品中文字幕久久 | 国产欧美一区二区三区久久 | 亚洲天天做日日做天天看2018 | 日韩精品亚洲人成在线观看 | 热99re久久国超精品首页 | 99免费在线 | 特黄特级a级黄毛片免费观看多人 | 精品一二区 | 手机在线一区二区三区 | 99久久综合狠狠综合久久 | 国产精品久久久久这里只有精品 | 亚洲免费一| 国产免费人成在线视频视频 | 99精品在线免费观看 | 亚洲欧美精品 | 毛片基地免费视频a | 精品91 | 中文字幕在线观看日韩 | 天天射天天爽 | 日韩 欧美 亚洲 中文字幕 | 91精品国产免费久久久久久 | 黄页免费观看1 | 女人与zzzooooxxx| 亚洲最大黄色网址 | 欧美色五月 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 日本中文字幕高清 | 午夜一级精品免费毛片 | 特黄未满14周岁毛片 | 日本不卡在线观看 | 国产精品香蕉成人网在线观看 | 欧美一级成人毛片影院 |