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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
让你同时上传 1000 个文件 (二)
Oct 09 PHP
php中的时间显示
Jan 18 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
Smarty保留变量用法分析
May 23 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 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
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
python下10个简单实例代码
2017/11/15 Python
python实现五子棋游戏
2019/06/18 Python
python常用函数与用法示例
2019/07/02 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python实现批量修改文件名
2020/03/23 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
Weblogc domain问题
2014/01/27 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
某公司面试题
2012/03/05 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
董事长秘书工作职责
2014/06/10 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
2019同学聚会主持词
2019/05/06 职场文书
如何写好开幕词?
2019/06/24 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL