核心库Memcached的bug

浏览:886 发布日期:2015/02/19 分类:技术分享
Memcached的set方法如下:public function set($name, $value, $expire = null)
    {
        N('cache_write',1);
        if(is_null($expire)) {
            $expire  =  $this->options['expire'];
        }
        $name   =   $this->options['prefix'].$name;
        if($this->handler->set($name, $value, time() + $expire)) {
            if($this->options['length']>0) {
                // 记录缓存队列
                $this->queue($name);
            }
            return true;
        }
        return false;
    }
如果传入的$expire为空,本意是长期缓存,时间上set方法却将它设置为当前时间time()+$expire,也就是设置了值之后马上就过期,你会发现取到的值一直是false。
另外构造函数将Memcached实例化过程写死,$this->handler      =   new MemcachedResource;,这样一来就不能根据需要构建长连接了。
题外话,tp所谓的CBD模式,其中的BD不少存在毛病,举个例子,B的BrowserCheckBehavior,主要是防刷新的,里面竟然是防止整个php文件的页面刷新,代码是这样:$guid    =    md5($_SERVER['PHP_SELF']);,要知道,按照常规MVC构架,一个controller会有好几个方法,这样就会造成不能在短时间内访问同一个controller内的不同的方法(他们为不同的页面)。
建议:既然作为一个框架,请开发者们尽量做好单元测试再提交,特别是作为核心库的Driver。要不然,让我们这些T粉反复琢磨发现问题后再上来提交bug就太浪费大家的时间了。比如我,大年初一的,为了这个问题琢磨了一个晚上。
总的来说,tp的构架思想还是很不错的,但是具体到某些问题上代码质量有待提高,最后祝大家新年快乐!
最佳答案
评论() 相关
后面还有条评论,点击查看>>