【问题标题】:How to use memcached with Joomla如何在 Joomla 中使用 memcached
【发布时间】:2009-08-11 13:12:47
【问题描述】:

如何在 Joomla 中使用内存缓存?我是这个领域的新手,所以请描述你的答案。

【问题讨论】:

  • 需要 memcached吗?
  • 恕我直言,使用 memcached 的网站通常应该远离 Joomla 或任何盒装 CMS。原因是 - 要实现 memcached - 您必须更改源 php 代码(有时可能会大幅更改)。 Joomla(或任何其他盒装 CMS)是为那些宁愿设计模板而不是更改源代码的人设计的。另外 - 你真的不应该改变 Joomla 的核心 php,因为它会是一个 hack,而且你将来更新时会遇到问题,这将使你的网站很容易被 hack。仅当您有集群时才使用 memchached。
  • @Andre Joomla 的核心有一个缓存层,它实现了 memcached、XCache 和平面文件缓存等。 Joomla 框架有一个缓存类,您可以在其中发送一个键值对,然后它根据配置中选择的驱动程序来处理缓存。绝对没有必要破解 Joomla 来添加 memcached;它已经内置了。

标签: php mysql joomla memcached


【解决方案1】:

您需要在您的服务器上安装 memcached,并且可能需要 root 访问权限才能这样做。您可以从 http://www.danga.com/memcached/ 获取 memcached。它需要libevent,可以在这里下载:http://www.monkey.org/~provos/libevent/

最后,您需要为 memcache 获取 PHP PECL 扩展。要安装它,您需要转到安装 PHP 的服务器并运行以下命令:

pecl install memcache

同样,您很可能需要对您的服务器进行 root 访问才能执行此操作。在你安装了 libevent、memcached 和 PECL 扩展之后,进入 Joomla 中的 Global Configuration 并选择 Memory Cache 作为 Cache Settings 下的 Cache Handler。保存全局配置后,再次打开它,更多输入应出现在缓存处理程序输入下方。将 Memory Chache Server 设置为localhost,将端口设置为11211。这应该与您用于从命令行运行 memcached 的参数匹配。

编辑:您还可以使用 XCache 不仅以类似于 Memcache 的方式存储数据,而且还可以缓存 PHP 生成的操作码。这样,它不会每次都从磁盘读取 PHP 代码并解析它,而是将代码保存在内存中以供下一次请求使用。

请务必在全局配置中选择XCache 作为缓存处理程序。有关安装 XCache 的信息,请阅读此内容:http://xcache.lighttpd.net/wiki/InstallFromSource

【讨论】:

  • 太棒了,非常感谢 jlleblanc
【解决方案2】:

为了使 Joomla 使用 memcache 进行会话缓存,您需要手动编辑 configuration.php 并更改此行:

public $session_handler = 'database';

到这个:

public $session_handler = 'memcache';

这是到处都缺少的,你需要添加一个新的选项 memcache_settings:

  public $memcache_settings = 'a:3:{s:10:"persistent";s:1:"0";s:11:"compression";s:1:"0";s:7:"servers";a:1:{i:0;a:2:{s:4:"host";s:9:"127.0.0.1";s:4:"port";s:5:"11211";}}}';

这是一个序列化的多维数组。我使用这段代码来生成上面的字符串:

 $a = array(
   "persistent" => "0", 
   "compression" => "0", 
   "servers" => array(
     "0" => array(
       "host" => "127.0.0.1", "port" => "11211")
     )
   );

echo(serialize($a));

如果您不添加 memcache_settings 选项,您的会话将永远无法使用 memcache。

【讨论】:

    【解决方案3】:

    configuration.php 中的这些设置适用于 Joomla 3.3+ 中的 memcached

    public $cache_handler = 'memcached';
    public $memcached_server_host = '127.0.0.1';
    public $memcached_server_port = '11211';
    public $memcached_persist = '1';
    public $memcached_compress = '1';
    public $cachetime = '15';
    public $session_handler = 'memcached';
    public $session_memcached_server_host = '127.0.0.1';
    public $session_memcached_server_port = '11211';
    

    在 Debian 系统上安装 memcached

    apt-get install memcached php5-memcached
    

    (您也可以使用memcache 代替上述public 变量中每次出现的memcached 并安装较旧的php5-memcache 扩展)

    升级到php5.5 将为您提供内置的Zend Opcode Cache - 这可以与APCu 一起使用(APCu 是带有操作码缓存的Alternative PHP Cache 已删除) - 如果您不需要分布式内存缓存,则在本地缓存用户空间 (memcached)

    对于单个 VPS,APCu 具有较低的内存占用 & 是更合适的缓存(尤其是 php5.5)& 可以在 configuration.php 中设置:

    public $cache_handler = 'apc';
    public $session_handler = 'apc';
    

    【讨论】:

      【解决方案4】:

      这个方法也可能为 Joomla 2.5 提供一些帮助,因为它指向 Joomla 管理屏幕以使用 memcache http://www.siteground.com/tutorials/supercacher/joomla_memcached.htm

      【讨论】:

        【解决方案5】:

        最好不使用 APC 作为后端缓存。这可能会导致很多碎片。我只看到它降低了 Joomla 的性能。

        【讨论】:

          猜你喜欢
          • 2018-07-20
          • 2016-07-22
          • 2021-01-26
          • 1970-01-01
          • 2016-09-28
          • 2014-10-28
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多