// 自定义缓存类

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);
} }

使用本类需要建立cache目录

require './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缓存技术的应用1的更多相关文章

  1. 网站缓存技术总结( ehcache、memcache、redis对比)

    网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验. 网站缓存按照存放的地点不同,可以分为客户端缓存. ...

  2. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  3. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

  4. [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术

    [.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...

  5. 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  6. 分布式缓存技术redis学习系列(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  7. PHP开发中的缓存技术汇总

    在PHP开发中,出于对网站服务器负载的考虑,往往需要对页面.数据等内容进行缓存处理,下面就来看看,在PHP开发中有哪些缓存方式吧. 1.页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存, ...

  8. .Net环境下的缓存技术介绍

    .Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 1.1 ...

  9. ASP.NET 缓存技术分析

    缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大 ...

  10. Android硬盘缓存技术DiskLruCache技术笔记

    防止多图OOM的核心解决思路就是使用LruCache技术,但LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次,这显然非常耗时.因此Googl ...

随机推荐

  1. 微信小程序开发显示城市天气

    本案例实现动态显示城市天气的功能,案例效果如下: 首先分析制作的思路: 1.在app.json文件的pages数组里加上main文件夹和template(模板)文件夹的路径. 2.在main.js文件 ...

  2. 借用数组对象的prototype给数组扩充降维方法

    原理:只要是一个对象,他都有一个prototype原型对象,保存共有的属性和方法. <!DOCTYPE html> <html lang="en"> < ...

  3. zmq作为守护进程?等待连接

    服务端是作为守护进程在运行的,客户端connect成功,但write时直接退出了,我在想肯能服务端socket在write时已经失效了,不然为什么会出现write时进程退出呢?现在的问题是,我要怎么才 ...

  4. bootstrap img自适应

    img 添加class名img-responsive适配屏幕

  5. 使用Thread创建线程

    #_author:来童星#date:2019/12/17#使用Thread创建线程import threadingimport timeclass Sunthread(threading.Thread ...

  6. Java——面向对象的特征三:多态性

    2.5面向对象的特征三:多态性 2.5.1 关于java语言中的向上转型和向下转型 ①向上转型(upcasting) :  子--->父(自动类型转换) ②向下转型(downcasting) : ...

  7. SCOI 2014 new :未来展望

    后期计划(可能延续到noip) 后期计划这种东西..唉...经历了三周的停课生涯,我似乎已经找到了一种状态,就是我一直期盼的状态,然后为了不落泪退役,具体是这样的: 由于现在的学习任务不太紧张了,所以 ...

  8. POJ2186-Tarjan-kosaraju-缩点

    目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门  原题目描述在最下面.  A认为B优秀,B认为C优秀,则A认为C优秀.问有多少个人被其他所有人 ...

  9. nutch集成solr和中文分词

    nutch集成solr和中文分词 一.构建nutch环境 1. 设置代理 由于nutch使用ant构建,ant调用ivy,会从maven仓库中下载依赖包,因此若公司需要代理才能上网,需要设置代理,如果 ...

  10. Centos 6 & Centos 7安装rabbitmq3.6.15(单节点)

    系统准备 安装 erlang 语言环境 安装rabbitmq 配置网页插件 配置访问账号密码和权限 系统准备 centos6.5 与 centos7 都可以 ###安装依赖文件 yum -y inst ...