存储Symfony 2缓存到其他地方?

4

是否有一种方式可以将symfony 2缓存(app/cache)存储在文件系统之外的其他地方?例如Memcache、S3等等?是否有内置选项可供选择?

2个回答

7

如果您想将其移动到项目目录之外,则需要在AppKernel类中重载getCacheDir()方法。

将其移动到Memcache的意义是什么?这个目录的内容大多数时候都是“编译”类和模板。这些文件已经被放入内存中了(APC已经做到了这一点)。

编辑:在开发过程中,很难避免I/O操作,但是您可以通过覆盖AppKernel的getCacheDir()getLogDir()方法,将Symfony的缓存目录轻松地移动到内存中,将它们指向/dev/shm

class AppKernel extends Kernel
{
    // ...

    public function getCacheDir()
    {
        if (in_array($this->environment, array('dev', 'test'))) {
            return '/dev/shm/appname/cache/' .  $this->environment;
        }

        return parent::getCacheDir();
    }

    public function getLogDir()
    {
        if (in_array($this->environment, array('dev', 'test'))) {
            return '/dev/shm/appname/logs';
        }

        return parent::getLogDir();
    }
}

来源:http://www.whitewashing.de/2013/08/19/speedup_symfony2_on_vagrant_boxes.html

这篇文章介绍了如何在Vagrant虚拟机中加速Symfony2应用程序的方法。首先,可以使用NFS共享文件夹来提高文件访问速度。其次,可以通过安装APC或XCache等PHP缓存扩展来减少PHP脚本的编译时间。最后,可以使用Vagrant插件vagrant-cachier来缓存软件包和依赖项,以便在重建虚拟机时快速恢复它们。这些技巧可以显著提高Symfony2应用程序的性能。

1
由于 APC 将您的文件缓存在内存中,所以没有 I/O(好吧,只有第一次)。无论如何,那就像试图将所有 PHP 源文件放入 Memcached、S3 或其他地方... - Jakub Zalas
为什么要踩?@Ascherer 分布式缓存会增加额外的开销(因为它是分布式的)。 - Jakub Zalas
我其实没有点踩。超级顶一下。但是如果分布式缓存在同一个网络上,这个开销将会非常小。 - Ascherer
我并没有说你这样做了。我只是在一个评论中问了一个问题并回复了你 ;) - Jakub Zalas
关于共享缓存,这是非常危险的,因为绝对路径在编译后的缓存中被硬编码。因此,您需要确保所有机器上的文件系统层次结构完全相同。 - Florian Klein
显示剩余3条评论

0

Gaufrette不允许你将Symfony的缓存存储在内存中。 - Jakub Zalas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接