2011-02-05 44 views
2

说我有,我可以使用存储会话缓存系统:使用缓存系统进行会话存储?

// example i have a cache class 
$memcached->add('key','value'); 
// then i can get the session from 
$memcached->get('key'); 

有什么优点和使用缓存的缺点(如memcached的,也许Redis可以适应,或其他的东西)的会话,而不是使用PHP的内置会话?

回答

3

通过将session.save_handler设置为mm,您应该能够在Apache的运行时内存中存储PHP存储会话数据。但是,要做到这一点,你需要编译PHP与内存管理模块(--with-mm),我不认为它适用于Windows。

如果您想使用memcached或其他缓存机制,那么最好使用session_set_save_handler来实现用户定义的存储处理程序,因此您不必重写会话管理代码。

如果你这样做,那么我认为以这种方式存储会话数据没有任何明显的缺点。显而易见的优势是速度。

编辑: 我碰到this page其中讨论,除了速度来,主要优点/使用memcached的存储会话,即缺点:

  • 可以很容易地共享在多个Web服务器会话,而无需使用粘性会话。
  • 但是,memcached并没有保证数据保持到期满—只有数据将而不是在到期后可用。因此,如果memcached在内存不足,最近没有使用,或者服务器完全关闭,会话数据将会丢失。
+0

那么,如果我们为什么需要使用高速缓存,我们可以使用会话? – 2011-02-06 09:04:37

4

我想先澄清一下。当你使用PHP会话存储时,会话被存储在一个文件中(通常在/ tmp中)。每个会话都成为它自己的文件。

当您使用memcached或redis存储会话时,您的PHP代码中没有任何更改。

您可以简单地配置php以使用redis或memcache来存储会话(通过php.ini中的会话保存处理程序进行配置)。

优点:

  • 会话存储/检索变得更快

缺点:

  • 需要配置php.ini文件(或实现会话存储处理器自己)

现在,我会a通常建议使用redis而不是memcache,因为会话将变为永久性的,所以如果您需要重新启动服务器,所有用户都不会注销。

对于Redis的: https://github.com/owlient/phpredis(请参阅“会话处理程序”在网页的下方)