使用方法:

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

转载于:https://www.cnblogs.com/hsapphire/archive/2010/03/18/1689215.html

PHP Memcached + APC + 文件缓存封装相关推荐

  1. 缓存处理类(MemoryCache结合文件缓存)

    想提升站点的性能,于是增加了缓存,但是站点不会太大,于是不会到分布式memcached的缓存和redis这个nosql库,于是自己封装了.NET内置的缓存组件 原先使用System.Web.Cachi ...

  2. Memcached集成Spring缓存环境构建

    2019独角兽企业重金招聘Python工程师标准>>> Memcached简要说明: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它 ...

  3. 不错php文件缓存类,一个不错的PHP文件页面缓存类

    [导读]在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考.页面缓存类 代码如下复制代码 在 缓存分类数据库缓存,文件缓存和内 ...

  4. php mysql文件缓存_PHP文件缓存类实现代码

    php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类 代码如下 : /*include( "cache.p ...

  5. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码

    iOS精选源码 一款优秀的 聆听夜空FM 源码 zhPopupController 简单快捷弹出自定义视图 WHStoryMaker搭建美图(贴纸,涂鸦,文字,滤镜) iOS cell高度自适应 有加 ...

  6. ASP.NET性能优化之构建自定义文件缓存

    ASP.NET的输出缓存(即静态HTML)在.NET4.0前一直是基于内存的.这意味着如果我们的站点含有大量的缓存,则很容易消耗掉本机内存.现在,借助于.NET4.0中的OutputCacheProv ...

  7. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码 1

    iOS精选源码 一款优秀的 聆听夜空FM 源码 zhPopupController 简单快捷弹出自定义视图 WHStoryMaker搭建美图(贴纸,涂鸦,文字,滤镜) iOS cell高度自适应 有加 ...

  8. Memcached Redis构建缓存服务器

    一.Memcached介绍 RDBMS即关系数据库管理系统(Relational Database Management System) 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取 ...

  9. 小程序如何解决文件缓存问题?

    项目场景: 近期Joe大叔因工作需求,小程序需要实现打开图片文件和PDF功能.当然,被打开的文件是需要增加缓存策略的,要不然每次打开一个6M的PDF文件都去服务端下载然后再打开,会严重影响到小程序迅速 ...

最新文章

  1. react native 开发笔记(二)
  2. 方案没效果,是方法有问题还是人有问题?
  3. 回顾 | Alibaba Cloud Native Day 杭州场圆满结束(附 PPT 下载)
  4. Protocol基本概念
  5. Javascript-7对象:字符串、时间
  6. jconsole查看连接数_在JConsole和VisualVM中查看DiagnosticCommandMBean
  7. linux 运行ca.crt,linux下使用openssl生成 csr crt CA证书,opensslcsr
  8. 【英语学习】【Daily English】U04 Neighborhood L01 Anything else around?
  9. 本科毕业找不到工作,是怎样的体会
  10. oracle升级补丁报错,oracle rac升级补丁及中间的错误提示
  11. 开源公司黄页之Facebook开源软件推荐(一)
  12. python是否存在键_检查给定的键在Python的字典中是否已经存在
  13. java坦克大战 需求分析,Java版坦克大战游戏的设计与实现(含录像)_JAVA
  14. 5款类蝉妈妈抖音数据工具推荐
  15. Android编程随机抽奖,Android 滚动抽奖的实现
  16. 您应该遵循的15个UI测试自动化最佳实践(上)
  17. lululemon女性鞋履系列携AR试穿体验首发上线
  18. C++11 ThreadPool总结
  19. lqr ilqr代码实例
  20. Python+Tushare,自制A股筛选器

热门文章

  1. vb 字符串替换_学习VB编程第69天 字符串查找与替换
  2. 【教程】Linux DNS 服务器安装、配置及维护
  3. matlab 老照片处理,matlab实现PS算法之百叶窗、老照片
  4. 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务
  5. pls-00302: 必须声明 组件_vue学习手册-单文件组件使用
  6. 多线程python 客户端fuwuq实现方式_python实现二叉树数据结构的多种遍历方式
  7. php 常量 循环 1,php循环控制break、continue语句、goto语句和php常量
  8. ios个推透传消息json接收不到_消息通讯——Websocket
  9. oracle创建序列seq起始值为1_Oracle修改序列(Sequence)起始值问题
  10. 【总结】超1000页有三AI文档资源领取方法汇总!