缓存S函数Bug修复方法,仅供参考

浏览:686 发布日期:2014/10/23 分类:求助交流 关键字: 缓存,S函数,Bug

如果整个网站统一使用同一个类型的缓存type这里是没有问题,但如果启用不用类型的缓存,这里就有问题了,如:
S('A',$val,array('type'=>'File','expire'=>3600));
S('B',$val,array('type'=>'Memcache','expire'=>3600));
这样在初始化后就被A缓存定义,
B就无法重新定义了
那么就无法正常启用Memcache类缓存。
解决方案:将原先中对cache初始化重新编写,根据缓存类型设置不同的保存对象。
将$cache 定义成数组,将缓存类型的md5作为key,这样就互不影响了

function S($name,$value='',$options=null) {
static $cache = array();
$type = isset($options['type'])?$options['type']:C('DATA_CACHE_TYPE');
$key=md5($type);
if (isset($cache[$key])) { //已设置
if (empty($cache[$key])){
$cache[$key]= Think\Cache::getInstance($type,$options);
}
}else{ //不存在
$cache[$key]= Think\Cache::getInstance($type,$options);
}
$_cache=$cache[$key];

if(''=== $value){ // 获取缓存
return $_cache->get($name);
}elseif(is_null($value)) { // 删除缓存
return $_cache->rm($name);
}else { // 缓存数据
if(is_array($options)) {
$expire = isset($options['expire'])?$options['expire']:NULL;
}else{
$expire = is_numeric($options)?$options:NULL;
}
return $_cache->set($name, $value, $expire);
}
}


最佳答案
评论( 相关
后面还有条评论,点击查看>>