PHP开发也有几个月了,感觉php缓存是很重要的一块,无论是页面级的(主要指smarty)还是dao级的。使用上还不怎么熟,但还是记录下笔记。本篇讲述的缓存是写到磁盘文件,这是看piwik源码时看到的,感觉思想很好,这也得益于PHP的var_export 方法。主要把要保存的内容(int,string,也可以使array)保存为php文件,这样当include这个php文件后,保存的内容就自动当做变量被include进来了。

源码如下:

class Piwik_CacheFile

{

protected $cachePath;

protected $cachePrefix;

function __construct($directory)

{

$this->cachePath = PIWIK_USER_PATH . '/tmp/cache/' . $directory . '/';

}

function get($id)

{

$cache_complete = false;

$content = '';

// We are assuming that most of the time cache will exists

$ok = @include($this->cachePath . $id . '.php');

if ($ok && $cache_complete == true) {

return $content;

}

return false;

}

function set($id, $content)

{

if( !is_dir($this->cachePath))

{

Piwik_Common::mkdir($this->cachePath);

}

if (!is_writable($this->cachePath)) {

return false;

}

$id = $this->cachePath . $id . '.php';

$cache_literal = "

$cache_literal .= "$"."content = ".var_export($content, true).";\n\n";

$cache_literal .= "$"."cache_complete = true;\n\n";

$cache_literal .= "?".">";

// Write cache to a temp file, then rename it, overwritng the old cache

// On *nix systems this should guarantee atomicity

$tmp_filename = tempnam($this->cachePath, 'tmp_');

if ($fp = @fopen($tmp_filename, 'wb')) {

@fwrite ($fp, $cache_literal, strlen($cache_literal));

@fclose ($fp);

if (!@rename($tmp_filename, $id)) {

// On some systems rename() doesn't overwrite destination

@unlink($id);

if (!@rename($tmp_filename, $id)) {

// Make sure that no temporary file is left over

// if the destination is not writable

@unlink($tmp_filename);

}

}

return true;

}

return false;

}

function delete($id)

{

$filename = $this->cachePath . $id . '.php';

if (file_exists($filename)) {

@unlink ($filename);

return true;

}

return false;

}

}

php如何存到磁盘,php缓存----磁盘缓存相关推荐

  1. 磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式

    目录 一.认识磁盘 程序不读入内存就无法运行 二.磁盘缓存 三.虚拟内存 四.虚拟内存与内存的交换方式 一.认识磁盘 磁盘和内存都具有存储功能,它们都是存储设备.区别在于,内存是通过 电流 来实现存储 ...

  2. linux raid卡缓存,RAID卡的缓存与磁盘自带的缓存的关系

    RAID卡的缓存与磁盘自带的缓存的关系 RAID卡是否有(启用)缓存对"随机读写"性能有巨大的影响.中高端的RAID卡都有缓存(价格也高). 那么RAID卡的缓存与磁盘自带的缓存是 ...

  3. 【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…

    出身寒微,不是耻辱.能屈能伸,方为丈夫. 文章目录 一.缓冲区(语言级:IO流缓冲,内核级:块缓冲) 1.观察一个现象 2.理解缓冲区存在的意义(节省进程IO数据的时间) 3.语言级缓冲区的刷新策略( ...

  4. ITOO4.1之缓存—分布式缓存Memcached学习(理论篇)

    1.   何为缓存?     缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快 ...

  5. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

    1      查询缓存 1.1  什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在 ...

  6. mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)

    查询缓存 1 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 2 mybat ...

  7. mysql 线程缓存_浅析MySQL内存的使用说明(全局缓存+线程缓存)

    首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): 复制代码 代码如下: per_thread_buffers=(read_buffer_s ...

  8. SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)

    1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...

  9. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

  10. 网络io和磁盘io_在磁盘IO上,第1部分:IO的风味

    网络io和磁盘io 10月,我将在纽约参加O'Reilly Velocity会议,并发表"当我们谈论磁盘IO时我们谈论的话题"的演讲 . 我决定将我的一些准备笔记发布为一系列博客文 ...

最新文章

  1. CVPR 2021 | 视觉目标检测大模型GAIA:面向行业的视觉物体检测一站式解决方案
  2. 容斥原理学习(Hdu 4135,Hdu 1796)
  3. iPad随想:苹果的妙招、谷歌的尴尬和中移动MM的局限
  4. 如何使用Java中的UTC或GMT获取当前日期和时间?
  5. Spring + JDK Timer Scheduler Example--reference
  6. 如何关闭linux系统中的覆盖输出重定向()功能
  7. 手机安装python的步骤_小白入门:Python安装的10个步骤,极其细致!!
  8. Android 去除最上面应用名称及图标
  9. MATLAB学习笔记之chirp信号的产生
  10. android 支付宝手势密码锁,Android仿支付宝手势密码解锁功能
  11. uni-app框架简介
  12. deepin linux 命令行_deepin-linux常用命令大全----每天一个linux命令 - 子成君-分享出去,快乐加倍!-旧版已停更...
  13. 协调才暴力-精英乒乓论坛
  14. 「干货」从动态的角度分析DDR的时序结构
  15. 红杉资本合伙人Maguire:Crypto将是未来30年最大趋势
  16. 盘是什么意思计算机网络,hdd网络上什么意思
  17. 用python画蜡笔小新的步骤_#6.1# 用python画出你的童年回忆
  18. 短信验证码mysql_短信验证码
  19. 【开学了】整理各种常用功能的实现 | 小游戏源码分享
  20. android磁场传感器页面布局在哪,教程:Android传感器—传感器查询demo

热门文章

  1. linux 下共享库创建及使用
  2. 如何跟各种人解释什么是产品经理
  3. 20个顶尖产品经理都在用的APP
  4. 面试题: Vue中的 computed 和 watch的区别
  5. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态
  6. sharepoint column中的图片链接不能显示为图片
  7. FreeSWITCH中文语音包
  8. 我看360与酷派的“爱情”之争
  9. 【crunch bang】 tint2-用来控制桌面的布局
  10. CentOS+postfix+ExtMail+amavisd-new+Spam_Locker+DSpam配置指南:五、配置maildrop