数据缓存是web开发中常用的一种性能优化方法。目前主要文件缓存或者数据库缓存两种形式,数据库缓存数据库不是什么不可能的事情,的确也是很好很重要的。我认为传统数据库主要是从业务层、模块设计等方面来考虑的,而缓存数据库主要是从实现层来设计的,主要是为了缓存常用的多表查询之类的。这里主要将的是文件缓存,网上很多资料了,这里我转载了一些原理资料。
Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。
<span style="COLOR: #000000"><br><span style="COLOR: #0000bb"> <br></span><span style="COLOR: #ff8000">// load data with cache <br><br></span><span style="COLOR: #007700">function </span><span style="COLOR: #0000bb">load_data</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$id</span><span style="COLOR: #007700">,</span><span style="COLOR: #0000bb">$cache_lifetime</span><span style="COLOR: #007700">) { <br><br></span><span style="COLOR: #ff8000">// the return data <br><br></span><span style="COLOR: #0000bb">$data </span><span style="COLOR: #007700">= array(); <br><br></span><span style="COLOR: #ff8000">// make cache filename <br><br></span><span style="COLOR: #0000bb">$cache_filename </span><span style="COLOR: #007700">= </span><span style="COLOR: #0000bb">‘cache_‘</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">$id</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">‘</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">php‘</span><span style="COLOR: #007700">; <br><br></span><span style="COLOR: #ff8000">// check cache file‘s last modify time <br><br></span><span style="COLOR: #0000bb">$cache_filetime </span><span style="COLOR: #007700">= </span><span style="COLOR: #0000bb">filemtime</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$cache_filename</span><span style="COLOR: #007700">); <br><br>if (</span><span style="COLOR: #0000bb">time</span><span style="COLOR: #007700">() - </span><span style="COLOR: #0000bb">$cache_filetime </span><span style="COLOR: #007700"><span style="COLOR: #0000bb">$cache_lifetime</span><span style="COLOR: #007700">) { <br><br></span><span style="COLOR: #ff8000">//** the cache is not expire <br><br></span><span style="COLOR: #007700">include(</span><span style="COLOR: #0000bb">$cache_filename</span><span style="COLOR: #007700">); <br><br>} else { <br><br></span><span style="COLOR: #ff8000">//** the cache is expired <br><br>// load data from database <br><br>// ... <br><br></span><span style="COLOR: #007700">while (</span><span style="COLOR: #0000bb">$dbo</span><span style="COLOR: #007700">-></span><span style="COLOR: #0000bb">nextRecord</span><span style="COLOR: #007700">()) { <br><br></span><span style="COLOR: #ff8000">// $data[] = ... <br><br></span><span style="COLOR: #007700">} <br><br></span><span style="COLOR: #ff8000">// format the data as a php file <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">= </span><span style="COLOR: #dd0000">" <br><br>while (list($key, $val) = each($data)) { <br><br>$data_cache .= "</span><span style="COLOR: #0000bb">$data</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">‘$key‘</span><span style="COLOR: #007700">]=array(</span><span style="COLOR: #0000bb">‘</span><span style="COLOR: #dd0000">"; <br><br>$data_cache .= "</span><span style="COLOR: #0000bb">‘NAME‘</span><span style="COLOR: #007700">=></span><span style="COLOR: #dd0000">""</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">qoute</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$val</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">‘NAME‘</span><span style="COLOR: #007700">]).</span><span style="COLOR: #dd0000">"\"," <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">.= </span><span style="COLOR: #dd0000">"‘VALUE‘=>\""</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">qoute</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$val</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">‘VALUE‘</span><span style="COLOR: #007700">]).</span><span style="COLOR: #dd0000">"\"" <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">.= </span><span style="COLOR: #dd0000">";);\r\n"</span><span style="COLOR: #007700">; <br><br>} <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">= </span><span style="COLOR: #dd0000">"?>\r\n"</span><span style="COLOR: #007700">; <br><br></span><span style="COLOR: #ff8000">// save the data to the cache file <br><br></span><span style="COLOR: #007700">if (</span><span style="COLOR: #0000bb">$fd </span><span style="COLOR: #007700">= </span><span style="COLOR: #0000bb">fopen</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$cache_filename</span><span style="COLOR: #007700">,</span><span style="COLOR: #0000bb">‘w</span><span style="COLOR: #007700">+</span><span style="COLOR: #0000bb">‘</span><span style="COLOR: #007700">)) { <br><br></span><span style="COLOR: #0000bb">fputs</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$fd</span><span style="COLOR: #007700">,</span><span style="COLOR: #0000bb">$data_cache</span><span style="COLOR: #007700">); <br><br></span><span style="COLOR: #0000bb">fclose</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$fd</span><span style="COLOR: #007700">); <br><br>} <br><br>} <br><br>return </span><span style="COLOR: #0000bb">$data</span><span style="COLOR: #007700">; <br><br>} <br><br></span><span style="COLOR: #0000bb">?></span> <br><br></span></span>
适用情况:
1.数据相对比较稳定,主要是读取操作。
2.文件操作要比数据库操作快。
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。
4.Web/DB分离结构或者多Web单DB结构。
未经证实的问题:
1.并发访问时对文件的读写是否会引起锁定问题。
2.涉及到的数据文件太多时,性能如何。
扩展思路:
1.生成JavaScript数据定义代码,在客户端调用。
2.还未想到……
望共同探讨。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Atom编辑器mac版下载
最流行的的开源编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。