centos5.2用memcache 來作PHP 的session.save_handler

來源:互聯網
上載者:User

最近我的網站訪問在直線上升,因為動態會員遊戲網站,一直在想辦法做些最佳化,今天想到如果把php的session放在記憶體,可能會提升網站的訪問速度。於是開始搜尋資料。經過一天的摸索,終於搞定。問題主要出在php有兩個memcache模組,一個是php-memcache,一個是php-memcached,php-memcached是最新的,也是比較穩定的,網上的資料都是關於php-memcache的,而沒有提到php-memcached,而php-memcached的配置跟php-memcache是有所不同的。大致的整個安裝過程:

1、安裝libevent  1.4.10

wget http://monkey.org/~provos/libevent-1.4.10-stable.tar.gz

tar xzvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.10-stable

./configure --prefix=/usr
make && make install

 

2、安裝memcached1.2.8

wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

tar -zxvf  memcached-1.2.8.tar.gz

cd memcached-1.2.8
./configure --with-libevent=/usr

make && make install

 

3、安裝zlib

wget http://www.zlib.net/zlib-1.2.3.tar.gz

tar -zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr --shared
make && make install

4、安裝libmemcached

wget http://download.tangent.org/libmemcached-0.26.tar.gz

tar zxvf libmemcached-0.26.tar.gz

cd libmemcached-0.26
./configure --prefix=/usr/local/libmemcached/

make && make install

 

5、安裝php-memcached模組

wget http://pecl.php.net/get/memcached

tar -zxvf  memcached-0.1.5.tgz

cd  memcached-0.1.5

phpize
./configure --with-php-config=/usr/bin/php-config --enable-memcache --with-libmemcached-dir=/usr/local/libmemcached

make && make install

6、啟動memcached

/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d

執行後,可以用以下辦法查看執行狀態

telnet 127.0.0.1 11211

stats

STAT pid 11568
STAT uptime 5910
STAT time 1241876672
STAT version 1.2.8
STAT pointer_size 32
STAT rusage_user 0.751885
STAT rusage_system 1.584759
STAT curr_items 2615
STAT total_items 36753
STAT bytes 244835
STAT curr_connections 3
STAT total_connections 18427
STAT connection_structures 36
STAT cmd_flush 0
STAT cmd_get 18388
STAT cmd_set 38334
STAT get_hits 15717
STAT get_misses 2671
STAT evictions 0
STAT bytes_read 4924864
STAT bytes_written 1992526
STAT limit_maxbytes 134217728
STAT threads 2
STAT accepting_conns 1
STAT listen_disabled_num 0
END
有以上資訊出現,表明啟動成功!

 

7、加入開機啟動

nano /etc/rc.d/local.d
加一行

/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d

8、編輯php.ini

nano /etc/php.ini

在檔案最後加入:

extension = "memcached.so"
修改

session.save_handler = files  -> session.save_handler = memcached
session.save_path = "/var/lib/php/session" -> session.save_path = "127.0.0.1:11211"

9、重啟apache

service httpd restart

 

大功告成!

 

需要注意的地方主要有2點,

1、安裝libmemcached需用到zlib,我機器沒有這個,花了很多時間找編譯libmemcached時出錯的原因。

2、php.ini檔案的配置,php-memcached模組跟php-memcache不同,要設成是memcached,這個在phpinfo頁面的Registered save handlers可以看到。如果設定不正確,會有"Cannot find save handler memcache"的錯誤提示。

3、session.save_path幾乎所有的資料都是session.save_path = "tcp://127.0.0.1:11211",但這可能在memcaceh是這樣用的,我沒有驗證,我一開始也是這樣設定,但一直出現"Failed to write session data (memcached)"的錯誤,找了很入也沒找到是什麼原因,後來在php.net上找到

session.save_path string

Defines a comma separated of hostname:port entries to use for session server pool, for example "sess1:11211, sess2:11211".

這段說明,於是去掉tcp://再試,才終於成功!

 

最後:因為網站一直在啟動並執行,建議不要直接動php.ini,

直接用一個php檔案來測試

 

<?
ini_set("session.save_handler","memcached");
ini_set("session.save_path","127.0.0.1:11211");

session_start();
if (!isset($_SESSION['TEST'])) {
 $_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>

 

只要這個檔案沒有出現錯誤提示了,就可以直接修改php.ini相應的內容,然後重啟apache,就樣就不影響會員訪問網站。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.