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实现。这当然是编写驱动程序的一个非常有效的理由,我会极力鼓励它(会话在缩放中是一个痛处)。

好运