FLEAPHP框架的文件缓存系统
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框架的文件缓存系统相关推荐
- 利用posix_fadvise清理系统中的文件缓存
利用posix_fadvise清理系统中的文件缓存 leoncom c/c++,unix2011-08-03 当我们需要对某段读写文件并进行处理的程序进行性能测试时,文件会被系统cache住从而影响I ...
- 缓存系统MemCached的Java客户端优化历程
來源:http://www.infoq.com/cn/articles/memcached-java 作者 岑文初 发布于 2008年9月27日 上午12时38分 社区 Java 主题 集群与缓存 M ...
- javaweb项目搭建ehcache缓存系统
转载自 javaweb项目搭建ehcache缓存系统 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider,同时在项目开发中 ...
- memcached搭建缓存系统
概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 适用场合 分布式应用.由于memcac ...
- 软件工程课程设计·SOA架构搭建SSM框架的网上商城系统
软件工程课程设计·SOA架构搭建SSM框架的网上商城系统 项目简介 本系统利用SSM框架.Dubbo框架.Maven模块化开发等技术开发的一个网上商城项目,主要包括订单系统模块.购物车系统模块.搜索系 ...
- OEA框架学习:缓存
一.摘要 陆陆续续学习OEA,也有一段时间了,从整体上来说自问还是了解,我们先来看看作者是怎么想的OEA中的缓存模块设计,看完了作者的文章为了巩固所学我们在来阅读代码,提高编程思维. 二. 技术背景 ...
- Tair缓存系统学习 (数据结构存储系统)
1.Tair 简介 Tair 是一个类似于map的key/value结构存储系统(也就是缓存系统),具备标准的特性是:高性能.高扩展.高可靠,也就是传说中的三高产品,支持分布式集群部署.官 ...
- Memcached 缓存系统的-介绍、安装以及应用
一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic ...
- 分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
最新文章
- UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
- Git使用教程:真正手把手教你使用git!
- Python List insert()方法
- python接口测试jason_Python 接口测试之Json数据文件操作
- 【Python】成绩等级判断
- 高等学校计算机房使用章程,普通高等学校设置暂行条例.DOC
- linux环境下刷机9008,LINUX下线刷修复变砖手机
- (15年)单循环赛制,所有参赛队伍在竞赛中均能两两相遇一次。由键盘获得N队伍数,采用递归算法实现对N支队伍总比赛场次的计算
- JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。...
- 【小刘带你玩儿前端】什么是跨域以及如何解决?小刘带你轻松拿彻底解决~
- 如何将华为云服务器重做系统并保留其中的指定数据
- 安卓原生系统_手机用这个App,系统变得比原生安卓还干净
- 虚拟直播需要哪些设备?如何搭建虚拟直播团队?
- 计算新闻传播学临摹作业_数据抓取与数据清洗(西安交大国家艺术基金数据可视化培训第34天)
- matlab 更换坐标轴_matlab怎么调整坐标轴范围-Matlab修改坐标轴标注范围的方法 - 河东软件园...
- html word 批注,word怎么批注修改文章
- Java微信开发_Exception_03_errcode:48001 errmsg:api unauthorized hint
- 利用Freemaker模板引擎制作包含表格和图片的word导出模板
- 006-python 之元组字符串
- Python 高级教程之类