PHP Memcached + APC + 文件缓存封装实现代码


Posted in PHP onMarch 11, 2010

使用方法:
Memcached

$cache = new Cache_MemCache(); 
$cache->addServer('www1'); 
$cache->addServer('www2',11211,20); // this server has double the memory, and gets double the weight 
$cache->addServer('www3',11211); 
// Store some data in the cache for 10 minutes 
$cache->store('my_key','foobar',600); 
// Get it out of the cache again 
echo($cache->fetch('my_key'));

文件缓存
$cache = new Cache_File(); 
$key = 'getUsers:selectAll'; 
// check if the data is not in the cache already 
if (!$data = $cache->fetch($key)) { 
// assuming there is a database connection 
$result = mysql_query("SELECT * FROM users"); 
$data = array(); 
// fetching all the data and putting it in an array 
while($row = mysql_fetch_assoc($result)) { $data[] = $row; } 
// Storing the data in the cache for 10 minutes 
$cache->store($key,$data,600); 
}

下载: class_cache3.php
<?php abstract class Cache_Abstract { 
abstract function fetch($key); 
abstract function store($key, $data, $ttl); 
abstract function delete($key); 
} 
class Cache_APC extends Cache_Abstract { 
function fetch($key) { 
return apc_fetch($key); 
} 
function store($key, $data, $ttl) { 
return apc_store($key, $data, $ttl); 
} 
function delete($key) { 
return apc_delete($key); 
} 
} 
class Cache_MemCache extends Cache_Abstract { 
public $connection; 
function __construct() { 
$this->connection = new MemCache; 
} 
function store($key, $data, $ttl) { 
return $this->connection->set($key, $data, 0, $ttl); 
} 
function fetch($key) { 
return $this->connection->get($key); 
} 
function delete($key) { 
return $this->connection->delete($key); 
} 
function addServer($host, $port = 11211, $weight = 10) { 
$this->connection->addServer($host, $port, true, $weight); 
} 
} 
class Cache_File extends Cache_Abstract { 
function store($key, $data, $ttl) { 
$h = fopen($this->getFileName($key), 'a+'); 
if (!$h) 
throw new Exception('Could not write to cache'); 
flock($h, LOCK_EX); 
fseek($h, 0); 
ftruncate($h, 0); 
$data = serialize(array(time() + $ttl, $data)); 
if (fwrite($h, $data) === false) { 
throw new Exception('Could not write to cache'); 
} 
fclose($h); 
} 
function fetch($key) { 
$filename = $this->getFileName($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; 
} 
return $data[1]; 
} 
function delete($key) { 
$filename = $this->getFileName($key); 
if (file_exists($filename)) { 
return unlink($filename); 
} 
else { 
return false; 
} 
} 
private function getFileName($key) { 
return '/tmp/s_cache' . md5($key); 
} 
} 
?>
PHP 相关文章推荐
PHP脚本的10个技巧(8)
Oct 09 PHP
上传多个文件的PHP脚本
Nov 26 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
基于PHP+Ajax实现表单验证的详解
Jun 25 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
php图像验证码生成代码
Jun 08 PHP
PHP学习笔记之session
May 06 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 #PHP
PHP调用Twitter的RSS的实现代码
Mar 10 #PHP
PHP中include()与require()的区别说明
Mar 10 #PHP
PHP扩展编写点滴 技巧收集
Mar 09 #PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 #PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 #PHP
php ss7.5的数据调用 (笔记)
Mar 08 #PHP
You might like
第十三节 对象串行化 [13]
2006/10/09 PHP
拼音码表的生成
2006/10/09 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python实现数据图表
2017/07/29 Python
python简单操作excle的方法
2018/09/12 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
戴尔美国官网:Dell
2016/08/31 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
团日活动策划书
2014/02/01 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
出国签证在职证明范本
2014/11/24 职场文书
文艺委员竞选稿
2015/11/19 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
DIY胆机必读:各国电子管评价
2022/04/06 无线电