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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php项目打包方法
Feb 18 PHP
解析php取整的几种方式
Jun 25 PHP
实现获取http内容的php函数分享
Feb 16 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP多线程类及用法实例
Dec 03 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
总结对比php中的多种序列化
Aug 28 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
TP5框架页面跳转样式操作示例
Apr 05 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获取MAC地址的具体实例
2013/12/13 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
Python修改MP3文件的方法
2015/06/15 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python中for用来遍历range函数的方法
2018/06/08 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
python format 格式化输出方法
2018/07/16 Python
python面试题之列表声明实例分析
2019/07/08 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
大学生学期自我鉴定
2014/03/19 职场文书
违反交通法规检讨书
2014/09/10 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015新学期开学寄语
2015/02/26 职场文书
经费申请报告范文
2015/05/18 职场文书
学校工会工作总结2015
2015/05/19 职场文书
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL