php数据缓存到文件类设计
// 自定义缓存类 class Cache_Filesystem { // 缓存写保存
function set ($key, $data, $ttl) {
//打开文件为读/写模式
$h = fopen($this->get_filename($key), 'a+');
if (!$h) throw new Exception("Could not write to cache"); flock($h, LOCK_EX); //写锁定,在完成之前文件关闭不可再写入 fseek($h, 0); // 读到文件头
ftruncate($h, 0); //清空文件内容 // 根据生存周期$ttl写入到期时间
$data = serialize(array(time()+$ttl, $data)); if (fwrite($h, $data) === false) {
throw new Exception('Could not write to cache');
} fclose($h);
} // 读取缓存数据,如果未取出返回失败信息 function get ($key) {
$filename = $this->get_filename($key);
if ( !file_exists( $filename ) ) {
return false;
} $h = fopen($filename, 'r');
if (!$h) return false; // 文件读取锁定
flock($h, LOCK_SH);
$data = file_get_contents($filename);
fclose($h); $data = @unserialize($data);
if ( !$data ) {
// 如果反序列化失败,则彻底删除该文件
unlink($filename);
return false;
} if (time() > $data[0]) {
// 如果缓存已经过期,则删除文件
unlink($filename);
return false;
} } // 清除缓存
function clear ( $key ) {
$filename = $this->get_filename($key);
if (file_exists($filename)) {
return unlink($filename);
} else {
return false;
}
} // 获取缓存文件 private function get_filename ($key) {
return './cache/' . md5($key);
} }
调用
require './4.3-cache_class.php';
// 创建新对象
$cache = new Cache_Filesystem(); function getUsers () {
global $cache; // 自定义一个缓存key唯一标识
$key = 'getUsers:selectAll'; // 检测数据是否缓存
if ( !$data = $cache->get( $key ) ) {
// 如果没有缓存,则获取新数据
$db_host = 'localhost';
$db_user = 'root';
$db_password = 'root';
$database = 'ecshop_test'; $conn = mysql_connect( $db_host, $db_user, $db_password);
mysql_select_db($database); //执行sql查询
$result = mysql_query("select * from ecs_users");
$data = array(); // 将获取到的数据放入数组$data中
while ( $row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
// 保存该数据到缓存中,生存周期为10分钟
$cache->set($key, $data, 10);
} return $data;
} try { $users = getUsers();
print_r($users);
$key = 'getUsers:selectAll';
//$cache->clear($key); } catch (Exception $e) {
print $e->getMessage();
}
php数据缓存到文件类设计的更多相关文章
- json和xml封装数据、数据缓存到文件中
一.APP的通信格式之xml xml:扩展标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己标记语言进行定义的源语言.XML格式统一,扩平台语言,非常适合数据传输和通信,业界公认的标准. ...
- mysql批量插入数据的基类
自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...
- 水果项目第1集-想法>需求->功能->数据库设计->类设计
懒,懒人,我是个懒人. 懒人想做点事,总是拖拖拉拉,迟迟没有开始. 很久很久以前,就想做属于自己的产品,但是至今还没有一个属于自己的产品. 两年前,终于想好,要做一个网上卖水果的系统,手机上点点,水果 ...
- YTU 2602: 熟悉题型——类设计( 矩形类定义【C++】)
2602: 熟悉题型--类设计( 矩形类定义[C++]) 时间限制: 1 Sec 内存限制: 128 MB 提交: 183 解决: 119 题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标 ...
- Java 类设计技巧
摘自<Java核心技术>卷I:基础知识 p140 第4章对象与类 - 类设计技巧 1)一定将数据设计为私有. 最重要的是:绝对不要破坏封装性.有时候,需要编写一个访问器方法或更改器方法,但 ...
- Java11-java基础语法(十)类设计综合案例
Java11-java语法基础(十)类设计综合案例 一.类综合设计方法 1.类设计步骤 (1)分析数据成员 (2)分析成员方法和构造方法 (3)画出类图 (4)编码测试 2.具体问题 1)分析数据成员 ...
- JFreeChart绘制XY折线图(工具类设计)
准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源 ...
- 如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
本文翻译自 https://support.microsoft.com/zh-cn/help/168958/how-to-export-an-instantiation-of-a-standard-t ...
- 关于项目中的DAL数据接入层架构设计
摘要:项目中对关系型数据库的接入再寻常不过,也有海量的ORM工具可供选择,一个一般性的DAL数据接入层的结构却大同小异,这里就分享一下使用Hibernate.Spring.Hessian这三大工具对D ...
随机推荐
- Windows环境下的RTKPlot_Qt版本编译时遇到的问题和解决方法
在使用了 RTKLIB开源包自带的 rtkplot.exe后,知道了它所具有的功能,就想着如何模仿它做出一个 demo.一开始看的是之前下载的 2.4.2版本的 RTKLIB,里面是使用 Delphi ...
- lvs初体验
一.简介 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网址是http://www.linuxvirtuals ...
- 【redis常用的键值操作及性能优化】
服务端 启动redis服务 { // -a:指定密码 -h:指定主机 -p:指定端口 } //让redis 服务中断崩溃 //保存和关闭 //后台备份 //设置登录密码 //redis-benchma ...
- mac phpstorm 破解方法
方法参考如下链接: 来源:http://www.cnblogs.com/zyliang/p/6148960.html
- ERROR: bootstrap checks failed
错误描述:Linux默认配置的参数过小,需要自己设置 max file descriptors [4096] for elasticsearch process is too low, increas ...
- dns文件
1.dns简介 dns为域名解析系统,当本地浏览器输入域名访问网站时,如果本地host中没有配置域名与IP的对应关系,那么域名信息将会被发送到dns服务器上,由dns服务器将域名解析为IP(过程较为复 ...
- Go生成UUID
Go生成UUID 在实际项目中,是经常会使用到一个唯一标识的,比如唯一标识一条记录等,使用C#得到唯一标识是很容易的.例 string guid = Guid.NewGuid().ToString() ...
- 为什么我要放弃javaScript数据结构与算法(第一章)—— JavaScript简介
数据结构与算法一直是我算比较薄弱的地方,希望通过阅读<javaScript数据结构与算法>可以有所改变,我相信接下来的记录不单单对于我自己有帮助,也可以帮助到一些这方面的小白,接下来让我们 ...
- C#中Equals和= =(等于号)的比较)(转载)
C#中Equals和= =(等于号)的比较) 相信很多人都搞不清Equals和 = =的区别,只是零星的懂一点,现在就让我带大家来进行一些剖析 一. 值类型的比较 对于值类型来说 ...
- P1103 书本整理
P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由 ...