2010-04-11 63 views
6

會話存儲我研究使用的memcached作爲建立在一個系統會話存儲的可能性。有沒有人以前做過這個(這可能是一個愚蠢的問題:)如果是這樣,你的經驗是什麼人?你有沒有使用任何現有的庫/擴展? 至於性能改善你見過什麼?任何警告?使用memcached的與笨

回答

6

有PHP把會話到內存緩存直接,而不是通過框架代碼很簡單 - 它只是改變兩條線在php.ini:

# see http://php.net/manual/en/memcache.ini.php 
session.save_handler = memcache 
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15" 

這裏使用了年齡稍大(但仍完全支持)來自PECL的'memcache'擴展。

1

您可以選擇笨Multicache圖書館,它可以在這裏找到:http://www.haughin.com/code/multicache/

在代碼中,你可以簡單的使用是這樣的:

$this->load->library('cache'); 
//To use memcache 
$this->cache->useMemcache($iptomemcache, $port); /*if you want, you can check to see if the connection even worked, as this will return false if the connection failed.*/ 
$this->cache->save('testkey', 'testdata', NULL, 3600); /*caches the testdata string for 1 hour. */ 
echo $this->cache->get('testkey'); 
//To switch back to file based caching 
$this->cache->useFile(); 
//etc. 
-3

這是不切合實際的使用Memcached的存儲關係數據(如MySQL);從Memcached請求每個項目然後測試它是否與查詢匹配將是低效的。對於這樣的問題有更好的解決方案(例如,考慮MySQL中的內存表)。另一方面,如果你正在尋找簡單的鍵/值存儲,這當然是Memcached的一個實際應用。然而,我會有點小心的是爲它編寫一個CodeIgniter驅動程序。 PHP中Memcached的界面已經很簡單:

$memcached->get('my key'); 
$memcached->set('my key', 'my value'); 

我建議直接使用Memcached類。將所有額外開銷加到CI上對我來說似乎是骯髒和不必要的。

另一方面,我見過用於CodeIgniter會話引擎的Memcached實現。這當然是編寫驅動程序的一個非常有效的理由,我會極力鼓勵它(會話在縮放中是一個痛處)。

好運