5

symfony 缓存系统是否处理 ext2 32000 文件在同一目录限制?

我有 80000 个用户,我想缓存他们的配置文件,但是 symfony 缓存系统能处理 ext2 限制吗?

我也在为将面临同样问题的其他人发帖。

4

1 回答 1

1

我不是 100% 确定我的答案是否正确,但PROJECT/lib/symfony/cache/sfCacheFile.class.php有一种方法:sfCacheFile::getFilePath()返回文件的路径。似乎没有任何针对ext2文件系统限制的保护措施。

但是有一个非常简单的解决方案 - 覆盖该类:

  1. PROJECT/apps/APP/config/factories.yml设置你自己的缓存类:

    default:
    # Others factories (if any)
    
      view_cache:
        class: myOwnFileCache
        param:
          automatic_cleaning_factor: 0
          cache_dir:                 %SF_TEMPLATE_CACHE_DIR%
          lifetime:                  86400
          prefix:                    %SF_APP_DIR%/template
    
  2. 现在创建该类并确保它扩展sfFileCache和覆盖getFilePath()

    # PROJECT/lib/PROJECT/cache/myOwnFileCache.class.php        
    class myOwnFileCache extends sfFileCache {
        protected getFilePath($key) {
            /*
                Convert from: abcdef
                          to: a/b/abcdef
            */
            $key = substr($key, 0, 1) . DIRECTORY_SEPARATOR . substr($key, 1, 1) . DIRECTORY_SEPARATOR . $key;
            return parent::getFilePath($key);
        }
    

    }

  3. 清除缓存:./symfony cc

现在您需要 32000个以完全相同的两个字母/数字开头的缓存键来破坏您的文件系统。

于 2010-04-22T21:29:04.360 回答