使用memcached作为CodeIgniter的会话存储

时间:2010-04-11 16:55:53

标签: php codeigniter session memcached

我正在研究使用 memcached 作为基于 CodeIgniter 构建的系统的会话存储的可能性。有没有人这样做过(这可能是一个愚蠢的问题:)如果是这样,你的经验是什么?您是否使用过任何现有的库/扩展? 对于性能提升,您看到了什么?有什么警告吗?

3 个答案:

答案 0 :(得分:6)

让PHP直接将会话放入Memcache,而不是通过框架代码很容易 - 它只是改变了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 :(得分:1)

您可以选择 CodeIgniter Multicache Library ,可在此处找到: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.

答案 2 :(得分:-3)

使用Memcached存储关系数据(如MySQL)是不切实际的;从Memcached请求每个项目然后测试它是否与查询匹配将是低效的。对于像这样的问题有更好的解决方案(例如,考虑MySQL中的内存表)。

另一方面,如果您正在寻找简单的键/值存储,那肯定是Memcached的实际应用。不过,我有点担心的是为它编写CodeIgniter驱动程序。 PHP中的Memcached接口已经很简单了:

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

我建议直接使用Memcached类。将所有额外开销添加到CI中对我来说似乎很脏并且没有必要。

另一方面,我看到Memcached的实现用于CodeIgniter的会话引擎。这当然是写一个驱动程序的一个非常正当的理由,我会高度鼓励它(会话是一个难以扩展的领域)。

祝你好运

相关问题