PHP缓存 Cache Lite源码总结

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 Lite源码总结》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>