PHP 有Redis,Memcache等高速缓存,但是低端服务器可能就没有这些配置了,我们可以尝试着把经常用到的数据(如:数组、导航条、页面底部信息等)缓存到文件中,这样就能“快速的”获取相应的信息了。
以下是尝试的一部分代码:
// 自定义缓存 class YCache { // 从文件读取缓存 // 将 json 转换为普通格式 // key 要读取的键值 public static function get($key ,$options) { $reval = ''; $path = __DIR__ . './cache/'; if (is_array($options)) { $baseOptions = self::setOptions([ 'path' => $path, ] ,$options); $path = $baseOptions['path']; } $file_name = $path.md5($key).'.txt'; //echo $file_name;die(); if (file_exists($file_name)) $reval = json_decode(file_get_contents($file_name),true); else $reval = null; return $reval; } // 写入文件缓存 // 用 json 格式保存内容 // key 要保存的键值 // value 要保存的值 public static function set($key ,$value ,$options) { $path = __DIR__ . './cache/'; if (is_array($options)) { $baseOptions = self::setOptions([ 'path' => $path, ] ,$options); $path = $baseOptions['path']; } $file_name = $path.md5($key).'.txt'; if(!file_exists(dirname($file_name))) mkdir(dirname($file_name), 0555); //echo $file_name;die(); file_put_contents($file_name , json_encode($value)); } // 根据传入的参数更改相应的设定 // baseOptions 基础设定数组 // options 传入的设定数组 public static function setOptions($baseOptions ,$options) { if (! is_null($options['subPath'])) $baseOptions['path'] .= $options['subPath'] .'/'; return $baseOptions; } }
测试代码如下:
$arr = [ 1 => [ 'name' => '帮助', 'parent_id' => 0, 'namealias' => 'help', 'keywords' => 'chm,helper' ], 2 => [ 'name' => '经验', 'parent_id' => 1, 'namealias' => 'exp', 'keywords' => 'exp,helper' ], ]; // 将数组存储到文件中 YCache::set('category_menu_with_zero',$arr ,['subPath' => 'category']);
读取数据:
$re = YCache::get('category_menu_with_zero' ,['subPath' => 'category']); echo $re[2]['name'];
输出结果:
经验