PHP缓存 Cache Lite源码总结
1、【设置参数的方法】
在构造方法中调用对象方法setOption设置类私有变量的值,从而完成对象的初始化操作。
在setOption方法中通过判断$name是否为$availableOptions数组中的一员来设置初始值。
感觉有些坏味道
2、【缓存文件命名规则】
命名规则对fileNameProtection参数有两种设置方法
如果此参数为真,则对于$group和$id进行md5加密,否则直接使用这两个字段
默认情况下使用md5加密后的名称
如下所示代码:
1 2 3 4 5 | if ($this->_fileNameProtection) { $suffix = 'cache_'.md5($group).'_'.md5($id); } else { $suffix = 'cache_'.$group.'_'.$id; } |
3、【缓存路径设置规则】
如果设置了hashedDirectoryLevel参数,则会在用户所给的缓存地址(cacheDir参数)后添加多层(hashedDirectoryLevel层)目录,所有的目录以cache_开头
默认hashedDirectoryLevel的值为0,即不添加嵌套目录
如下所示代码:
1 2 3 4 5 6 7 | $root = $this->_cacheDir; // 用户所给的缓存地址 if ($this->_hashedDirectoryLevel>0) { $hash = md5($suffix); for ($i=0 ; $i<$this->_hashedDirectoryLevel ; $i++) { $root = $root . 'cache_' . substr($hash, 0, $i + 1) . '/'; } } |
4、【基于内存的缓存】
在缓存参数中我们可以看到有一个memoryCaching参数,此参数默认情况下为false,
对于这个内存缓存,我有些疑惑:
1、基于apache2服务器的PHP页面,每次访问都会有一个apache线程处理这个请求,而在每个线程中,这些内存缓存都是以对象属性的形式存在,则在各线程间如何共享?这样存在的意义是什么?
2、如果是在一次执行中进行缓存,那这样做的意义又有多大呢?
5、【过期时间的控制】
在每次读取缓存时间都会调用_setRefreshTime方法刷新此前时间,
$this->_refreshTime = time() – $this->_lifeTime;
然后在取数据时判断缓存文件的创建时间是否比_refreshTime大
1 2 3 | if ((file_exists($this->_file)) && (@filemtime($this->_file) > $this->_refreshTime)) { $data = $this->_read(); } |
6、【_write函数中的坏味道】
在_write函数和_setFileName函数之间有重复代码
个人觉得可以将此提取出来。
7、【caching参数的必要性】
此参数控制全局的缓存的打开与关闭,在调试程序时十分有用
8、【自动清除旧缓存的控制】
automaticCleaningFactor参数控制是否自动清除旧缓存,
如果此参数的值大于1则会进行自动清除,只是在程序中针对自动清除有一个随机数,
可以理解为 1 / automaticCleaningFactor的机率进行自动清除旧缓存
9、【……】
很轻便的缓存类,如果是简单应用,值得一试!
EOF
谢谢,正在研究php cache相关的内容,非常的有用。