b2d38a05340ac61af17fb4267945ff7a.jpg
 
PHP 預設的 session 是採用 file,也就是在你的 session 目錄中會多了一堆檔案,甚至是多層的目錄來存放 session 的資料。但如果流量一大的時候,使用檔案的方式就會變慢,而且不容易做分散式的管理。

除了檔案的方式之外,ADOdb for PHP 也提供使用資料庫的作法,這樣不但可以加快速度,也可以作分散式的處理。但若是資料庫本身 Loading 重的時候,可能會影響到效能。

所以以下介紹另一種選擇,memcached。就是利用 RAM 當作 session 存放的地方。所有的 session 資料都存放在 RAM 中,這樣存取速度就夠快了吧,而且支援 TCP ,可以很容易的就讓多個 Web Server 使用喔!

  • 安裝 Memecached
    使用 yum 安裝
    yum -y install php-pecl-memcached memcached memcached-devel
     
    自己 compiler 的話
    # wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz
    # wget https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz --no-check-certificate
    # tar -zxvf libevent-2.0.15-stable.tar.gz
    # cd libevent-2.0.15-stable
    # ./configure
    # make
    # make install
    # cd memcached-1.4.9
    # ./configure
    # make
    # make install
    // make a soft link of the libevent
    #  ln -s /usr/local/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5
     

    以上的指令可以幫助你抓到 memcached 的 source 以及所需要的 Library。最好自己可以查看一下,抓最新版本的來用喔!
    Compiler 好之後,就可以在你開機的 script 中,(我一般放在 /etc/rc.d/rc.local),讓你的 memcached 自動執行起來,語法如下:
    1
    /usr/local/bin/memcached -d -m 2048 -l localhost -p 11211 -u root -c 512
    參數的意義如下:
        -d 是指要把它執行為一個 daemon
        -m 是你要給他多少記憶體使用。我的例子中給 2048MB (2GB)
        -l  IP Address
        -p Port Number
        -u 用哪個 username 執行
        -c 最大可接受的 connections
    執行起來之後,還要修改 php.ini
    這裡只要改兩行就好:
     
    [Session]
    ; Handler used to store/retrieve data.
    #session.save_handler = files
    session.save_handler = memcache
     
    ; where MODE is the octal representation of the mode. Note that this
    ; does not overwrite the process's umask.
    #session.save_path = "/var/lib/php/session"
    session.save_path="tcp://localhost:11211"
     
    當然,要記得把 extension 設起來喔! extension=memcache.so
    接下來用 phpinfo 測試一下就知道了!如果成功的話應該會看到以下畫面
     
Facebook 討論區載入中...