FLEAPHP框架使用文件缓存,主要是是为了它自带的数据库操作服务的,当然,开发者也可以利用它提供的API来进行一些简单的缓存操作。

注意到其中的一些实现细节:

摘取一个缓存文件的内容如下:

<?php die(); ?>                        277145528a:5:{s:9:"REPORT_ID";a:12:{s:4:"name";s:9:"report_id";s:5:"scale";N;s:4:"type";s:3:"
int";s:9:"maxLength";s:2:"12";s:10:"simpleType";s:1:"R";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIncrement";b:1;s:6:"binary
";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:9:"SITE_TYPE";a:12:{s:4:"name";s:9:"site_type";s:5:"scal
e";N;s:4:"type";s:7:"tinyint";s:9:"maxLength";s:1:"4";s:10:"simpleType";s:1:"I";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIn
crement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:8:"DESCRIBE";a:12:{s:4:"name";s:
8:"describe";s:5:"scale";N;s:4:"type";s:4:"text";s:9:"maxLength";i:-1;s:10:"simpleType";s:1:"X";s:7:"notNull";b:0;s:10:"primaryKey";
b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}s:5:"EMAIL";a:12:{
s:4:"name";s:5:"email";s:5:"scale";N;s:4:"type";s:7:"varchar";s:9:"maxLength";s:3:"255";s:10:"simpleType";s:1:"C";s:7:"notNull";b:0;
s:10:"primaryKey";b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"description";s:0:"";}
s:7:"URL_MD5";a:12:{s:4:"name";s:7:"url_md5";s:5:"scale";N;s:4:"type";s:7:"varchar";s:9:"maxLength";s:2:"32";s:10:"simpleType";s:1:"
C";s:7:"notNull";b:1;s:10:"primaryKey";b:0;s:13:"autoIncrement";b:0;s:6:"binary";b:0;s:8:"unsigned";b:0;s:10:"hasDefault";b:0;s:11:"
description";s:0:"";}}

可以看到,该缓存文件的开头是die函数,这样,即使有人猜到了url,并且该url又允许访问,他也只不过得到一个die结果而已,不会获取到缓存的真正内容。

另外,当读取的时候,还做了hash判断:

$data = safe_file_get_contents($cacheFile);
            $hash = substr($data, 16, 32);
            $data = substr($data, 48);
            if (crc32($data) != $hash || strlen($hash) != 32) {
                return false;
            }

由于做了校验,这样如果有人动了缓存文件,那么该文件就会失效。

同时,注意到safe_file_get_contents的实现,使用了clearstatcache函数,清除有关文件的系统缓存(不过我也不知道这样有什么好处)。

对于缓存是否失效方面,是比较文件的mtime的。提供了两种方式,一种是比较mtime与当前时间的差是否大于给定的时间,另一种是检查mtime是否晚于给定时间。即,一个是给定时间差,一个是给定失效具体时间。

FLEAPHP框架的文件缓存系统相关推荐

  1. 利用posix_fadvise清理系统中的文件缓存

    利用posix_fadvise清理系统中的文件缓存 leoncom c/c++,unix2011-08-03 当我们需要对某段读写文件并进行处理的程序进行性能测试时,文件会被系统cache住从而影响I ...

  2. 缓存系统MemCached的Java客户端优化历程

    來源:http://www.infoq.com/cn/articles/memcached-java 作者 岑文初 发布于 2008年9月27日 上午12时38分 社区 Java 主题 集群与缓存 M ...

  3. javaweb项目搭建ehcache缓存系统

    转载自  javaweb项目搭建ehcache缓存系统 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider,同时在项目开发中 ...

  4. memcached搭建缓存系统

    概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 适用场合 分布式应用.由于memcac ...

  5. 软件工程课程设计·SOA架构搭建SSM框架的网上商城系统

    软件工程课程设计·SOA架构搭建SSM框架的网上商城系统 项目简介 本系统利用SSM框架.Dubbo框架.Maven模块化开发等技术开发的一个网上商城项目,主要包括订单系统模块.购物车系统模块.搜索系 ...

  6. OEA框架学习:缓存

    一.摘要 陆陆续续学习OEA,也有一段时间了,从整体上来说自问还是了解,我们先来看看作者是怎么想的OEA中的缓存模块设计,看完了作者的文章为了巩固所学我们在来阅读代码,提高编程思维. 二. 技术背景 ...

  7. Tair缓存系统学习 (数据结构存储系统)

    1.Tair 简介       Tair 是一个类似于map的key/value结构存储系统(也就是缓存系统),具备标准的特性是:高性能.高扩展.高可靠,也就是传说中的三高产品,支持分布式集群部署.官 ...

  8. Memcached 缓存系统的-介绍、安装以及应用

    一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic ...

  9. 分布式缓存系统Memcached简介与实践

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

最新文章

  1. UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
  2. Git使用教程:真正手把手教你使用git!
  3. Python List insert()方法
  4. python接口测试jason_Python 接口测试之Json数据文件操作
  5. 【Python】成绩等级判断
  6. 高等学校计算机房使用章程,普通高等学校设置暂行条例.DOC
  7. linux环境下刷机9008,LINUX下线刷修复变砖手机
  8. (15年)单循环赛制,所有参赛队伍在竞赛中均能两两相遇一次。由键盘获得N队伍数,采用递归算法实现对N支队伍总比赛场次的计算
  9. JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。...
  10. 【小刘带你玩儿前端】什么是跨域以及如何解决?小刘带你轻松拿彻底解决~
  11. 如何将华为云服务器重做系统并保留其中的指定数据
  12. 安卓原生系统_手机用这个App,系统变得比原生安卓还干净
  13. 虚拟直播需要哪些设备?如何搭建虚拟直播团队?
  14. 计算新闻传播学临摹作业_数据抓取与数据清洗(西安交大国家艺术基金数据可视化培训第34天)
  15. matlab 更换坐标轴_matlab怎么调整坐标轴范围-Matlab修改坐标轴标注范围的方法 - 河东软件园...
  16. html word 批注,word怎么批注修改文章
  17. Java微信开发_Exception_03_errcode:48001 errmsg:api unauthorized hint
  18. 利用Freemaker模板引擎制作包含表格和图片的word导出模板
  19. 006-python 之元组字符串
  20. Python 高级教程之类

热门文章

  1. python3 打印目录下所有模块_使用 Python 函数进行模块化
  2. js:按钮绑定多个事件的三种方法(js,DOM,jQuery)
  3. DAU和MAU的分析
  4. C语言实现简单的图书馆小程序(练习指针和结构体的基本使用)
  5. 怎么修改SQL的密码?
  6. storm部署安装deploy
  7. 微信小程序入门(登录页面)
  8. [Python]将一个字典(dict)用npy存储并读取
  9. Embeded linux之网卡驱动
  10. 雅可比(Jacobi)计算特征值和特征向量