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中进行身份认证
Oct 09 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP 并发场景的几种解决方案
Jun 14 PHP
php DES加密算法实例分析
Sep 18 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
PHP分页详细讲解(有实例)
2013/10/30 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
js切换div css注意的细节
2012/12/10 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
vue实现tab栏点击高亮效果
2020/08/19 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Django视图和URL配置详解
2018/01/31 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
"引用"与指针的区别是什么
2016/09/07 面试题
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
材料采购员岗位职责
2013/12/17 职场文书
教师考察材料范文
2014/06/03 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
律政俏佳人观后感
2015/06/09 职场文书