【问题标题】:Storing Symfony 2 cache elsewere?将 Symfony2 缓存存储在别处?
【发布时间】:2012-05-28 04:31:24
【问题描述】:

有没有办法将 symfony 2 缓存(应用程序/缓存)存储在文件系统之外的其他地方? Memcache、S3 还是什么?任何内置选项?

【问题讨论】:

    标签: caching symfony


    【解决方案1】:

    您只能通过重载 AppKernel 类中的 getCacheDir() 方法将其移出项目目录。

    将其移至 Memcache 有什么意义?这个目录的内容大部分时间是“编译”的类和模板。这些文件无论如何都会被放入内存中(APC 会这样做)。

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

    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

    【讨论】:

    • 由于 APC 将您的文件缓存在内存中,因此没有 I/O(嗯,只是第一次)。无论如何,这就像试图将所有 PHP 源文件放到 Memcached、S3、wahtever...
    • APC 缓存操作码,但它是否仍然会命中每个文件以检查修改时间以防它们被更改?将缓存目录指向 /dev/shm 以将它们存储在 ramdisk 上可能有一些价值,即使对于这些微小的 I/O 操作也是如此。 (我无法想象这在任何实际意义上都会很重要......但有趣的想法仍然是)
    • 不,在 prod 上,您应该禁用 apc.stat 以避免检查修改时间。
    • @JakubZalas 分布式缓存在这里也很有优势。如果您正在运行多个网络服务器
    • 为什么要投反对票? @Ascherer 分布式缓存会产生额外的开销(因为它是分布式的)。
    【解决方案2】:

    您可以使用 Gaufrette(https://github.com/KnpLabs/Gaufrettehttps://github.com/KnpLabs/KnpGaufretteBundle)从几乎任何可能的存储(APC、内存、S3、FTP、SQL db)创建虚拟文件系统。然后将 cache-dir 设置为 gaufrette://s3 例如。

    【讨论】:

    • Gaufrette 不允许你将 Symfony 的缓存存储在内存中。
    猜你喜欢
    • 2012-08-05
    • 2011-09-20
    • 2014-10-06
    • 2016-05-07
    • 2012-09-23
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多