要将项目保存在缓冲区中,mod_disk_cache会为被请求的URL创建一个22字符的哈希值。
该哈希值包含了该URL的主机名、协议、端口、路径、CGI变量,以确保多个URL不会发生碰撞。
这22个字符的取值范围是64个不同的字符,这意味着最多可以有22^64种可能的取值。
例如,一个URL的哈希值可能是:xyTGxSMO2b68mBCykqkp1w 。
这个哈希值将被用作缓存中对应于那个URL的文件名前缀,但是首先,这个哈希值将被按照CacheDirLevels和CacheDirLength指令分解成每一级目录名。
CacheDirLevels指定了子目录的层数,CacheDirLength指定了每级子目录名的字符数。
使用上述例子的设置,这个哈希值将被转化成如下文件名前缀:/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w
。
使用这种技术的总体目标是减少某个特定目录中子目录或文件的个数,因为绝大多的文件系统在子目录或文件数过多的情况下的访问速度都会大打折扣。
将CacheDirLength设置为"1"将使得任意一层目录下的子目录数都不会超过64,若为设为"2"则为64*64,依此类推。
除非你有一个非常好的理由,否则"1"将是CacheDirLength指令的推荐值。
如何设置CacheDirLevels指令的值取决于你预计到将会在缓冲区中保存多少个文件。
上述示例使用的"2"将会导致大约会有4096个子目录最终被建立,大约100万个文件被缓存,大约平均每个文件夹存储245个URL缓冲文件。
每个URL在缓冲区中至少会使用两个文件。
通常,一个是包含了URL元信息(meta-information)的".header"文件,比如何时失效;另一个是".data"文件,包含了按字节复制的用于为URL提供服务的内容。
在通过使用"Vary"头进行内容协商的情况下,将会为该URL创建一个".vary"目录,该目录下将会保存多个适合不同协商内容的".data"文件。