您现在的位置是: 首页 >  技术分享 > 

关于文件缓存的应用及设置
叶子 2022-01-11 19:26:11

一般想要提高页面访问速度,就需要设置缓存。常见的缓存有memcache、redis、文件缓存。像我之前的网站会定时生成一个静态页面,用户访问的时候,不走动态数据,直接访问缓存文件,速度就会大大提升。当然了,如果有数据更新的话,可以在后台清除对应的文件缓存。


一般缓存的运用需要多种方式的缓存结合,这篇文章主要是来写关于文件缓存的应用及其设置。文件缓存生成的数据可以是静态页面,当然也可以生成对应的数组。像网站中出现的分类或者城市,都可以用用文件缓存生成对应的数组,调用的时候直接调用缓存,如果缓存不存在,生成缓存,继续调用。(以下例子均采用php语言的形式来示范,其他语言也大同小异)


如果文件缓存目录设置为/data/cache,就可以这样写

$cacheFile ='/data/cache/index.php';
生成的文件后缀名可自定义,当然也可以写成动态的,比如传对应的id,或者传当前时间都可以。此路径就是我们要生成缓存的路径。


1、第一种判断方式,生成的结构是序列化的。

if (is_file($cacheFile) && (time()-filemtime($cacheFile)< 3600*24){
//判断你缓存文件是否存在,是否在过期时间之内。
$list = unserialize(file_get_contents($cacheFile));
//如果存在的话,你就可以在前台调用
//因为数据是从文件读取的,所以叫文件缓存
}else{
//如果缓存不存在,需要对数据进行处理,重新生成缓存
$sql = 'select * from test where status = 1';
$list = $this->query($sql);//执行sql获取数组
//数据的处理因业务不同,写法也不同
file_put_contents($cacheFile,serialize($list));
}
2、第二种判断方式,生成的结构是数组的。

$data = @include($cacheFile);//用include获取缓存文件信息
if (!$data || ($data['time']+3600)<time()){
//如果缓存不存在或过期
$sql = 'select * from test where status = 1';
$list = $this->query($sql);
//根据业务不同,获取对应的数据
$data['list'] = $list;
//写入缓存
$data = array('time'=>time(),'data'=>$data);
$data_str = '<?php' . "\n" . 'return ' . var_export( $data, true ) . ';' . "\n" . '?>';
file_put_contents($cacheFile,$data_str);
}else{
//直接读取缓存
extract($data['data']);
//函数从数组中把变量导入到当前的符号表中。
}
设置缓存的基本原理是:缓存不存在或过期,重新生成缓存,读取缓存。

yezismile wechat
欢迎关注博主公众号
分享:

Copyright © 2020
www.yezismile.com All rights reserved. 京ICP备15029736号-1