用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: saturn
收起左侧

[辅助方法 Helper] 骑兵系列:memcached和model结果集“智能”切换小助手

  [复制链接]
发表于 2011-12-10 12:28:53 | 显示全部楼层
很给力啊!
发表于 2012-4-14 13:01:40 | 显示全部楼层
好东西,收藏
发表于 2012-4-15 08:36:56 | 显示全部楼层
本帖最后由 backwang 于 2012-4-15 09:02 编辑

楼主,我把https://gist.github.com/1142184#file_query_cache.php这个文件放到了我的application\helpers文件夹下,并在控制器里也LOAD了,但是页面显示空白,开始我以为是我的HELPERS添加有问题,于是我一步一步试最后把你的这个函数内容删减成只有echo "OK";于是页面就可以显示OK了,我又排除一步一步试if( ! in_array($model, $CI->load->_ci_models, TRUE))这句里的$CI->load->_ci_models这个一添加起就无法显示,不知道为什么,后我又把这个HELPER放到系统里的HELPER文件里里,问题依然。因为这步都过不了,后面的语句就都无法运行了!望觖!

注:还有我在$CI = & get_instance();这句时,返回的结果为空!
 楼主| 发表于 2012-4-16 23:18:32 | 显示全部楼层
在入口文件index.php文件中,打开php的错误报告:

error_reporting(E_ALL);
ini_set('display_errors', 1);

找到真实的php错误,然后贴上来再讨论。
发表于 2012-7-16 10:12:00 | 显示全部楼层
3Q   {:soso_e179:}
发表于 2012-10-30 11:35:12 | 显示全部楼层
期待文件缓存版本
发表于 2012-12-26 17:51:56 | 显示全部楼层
backwang 发表于 2012-4-15 08:36
楼主,我把https://gist.github.com/1142184#file_query_cache.php这个文件放到了我的application\\helpers ...

我也遇到类似问题

$CI->load->_ci_models这个好像是私有属性,不能外部访问
发表于 2013-5-9 21:11:42 | 显示全部楼层
mark
发表于 2013-7-1 16:57:23 | 显示全部楼层
本帖最后由 benfeng 于 2013-7-2 10:12 编辑
saturn 发表于 2012-4-16 23:18
在入口文件index.php文件中,打开php的错误报告:

error_reporting(E_ALL);


测试了下代码
PHP复制代码
$CI = & get_instance();
$data = $CI->load->_ci_models;
var_dump($data);
复制代码



返回下面的错误信息
  1. Fatal error: Cannot access protected property CI_Loader::$_ci_models in ...\controllers\welcome.php on line XX
复制代码

发表于 2013-8-21 20:33:33 | 显示全部楼层
PHP复制代码
function query_cache($key, $model, $method, $params = array(), $ttl = 1296000) {
    $CI = & get_instance();
 
    // 如果是本地测试等不支持memcache的环境,直接从model中获取数据后返回
    if (!$CI->cache->memcached->is_supported()) {
        // model是否已经加载?
        // Load models on demand
        if (!in_array($model, $CI->load->_ci_models, TRUE)) {
            $CI->load->model($model);
        }
 
        // Ref this model
        $handler = & $CI->$model;
        return call_user_func_array(array($handler, $method), $params);
    }
 
    // 如果数据没有被缓存或者已经过期
    if (!$data = $CI->cache->memcached->get($key)) {
        // model是否已经加载?
        // Load models on demand
        if (!in_array($model, $CI->load->_ci_models, TRUE)) {
            $CI->load->model($model);
        }
 
        // Ref this model
        $handler = & $CI->$model;
       
        // 从model中获取数据
        $data = call_user_func_array(array($handler, $method), $params);
 
        // 提醒: 空结果 (0, FALSE) 会忽略!
        if (!empty($data)) {
            // 缓存该数据
            $CI->cache->memcached->save('result_'.$key, $data, $ttl);
            //注意所有数据缓存加了一个‘result_’前缀,以便跟output_,以及session区分
        }
    }
 
    return $data;
}
复制代码

本版积分规则