缓存是现在系统中必不可少的模块,并且已经成为了高并发高性能架构的一个关键组件。
概念缓存所谓的缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。
1、通过文件缓存;
顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式;
2、内存缓存;
也就是创建一个静态内存区域,将数据存储进去,例如我们B/S架构的将数据存储在Application中或者存储在一个静态Map中。
3、分布式缓存机制;
可能存在跨进程,跨域访问缓存数据
对于分布式的缓存,此时因为缓存的数据是放在缓存服务器中的,或者说,此时应用程序需要跨进程的去访问分布式缓存服务器。
PHP缓存PHP缓存包括PHP编译缓存和PHP数据缓存两种。
PHP是一种解释型语言,属于边编译边运行的那种。这种运行模式的优点是程序修改很方便,但是运行效率却很低下。
PHP编译缓存针对这种情况做改进处理,使得PHP语言只要运行一次,就可以把程序的编译结果缓存起来。
PHP是一种解释型语言,在PHP语言执行代码的时候,需要下面两步:
1、编译过程。
PHP读取文件,并编译该文件,然后生成能够在ZndEngin虚拟机上执行的中间码。
2、执行过程。
PHP直接执行中间码。
效率低下的场景:
1、即使PHP代码文件没有发生改变,也会被PHP重新编译。
2、如有引用文件,PHP也要花费时间重新编译这些被引用的文件。
因此,需要PHP编译缓存工具对PHP程序的编译结果做缓存处理。这样,PHP程序只要编译一次,就不要重新再做无意义的编译了。
PHP的数据缓存包括针对数据库数据进行缓存和针对PHP模板数据进行缓存。
针对数据库数据进行缓存的工具有mmcach等。
针对PHP模板数据进行缓存的工具主要有smarty等。
优势提升性能绝大多数情况下,slct是出现性能问题最大的地方。
一方面,slct会有很多像join、group、ordr、lik等这样丰富的语义,而这些语义是非常耗性能的;
另一方面,大多数应用都是读多写少,所以加剧了慢查询的问题。
分布式系统中远程调用也会耗很多性能,因为有网络开销,会导致整体的响应时间下降。
为了挽救这样的性能开销,在业务允许的情况(不需要太实时的数据)下,使用缓存是非常必要的事情。
缓解数据库压力当用户请求增多时,数据库的压力将大大增加,通过缓存能够大大降低数据库的压力。
缓存的适用场景对于数据实时性要求不高
对于一些经常访问但是很少改变的数据,读明显多于写,适用缓存就很有必要。
比如一些网站配置项。
对于性能要求高
比如一些秒杀活动场景。
生存期生存期是指数据保持有效性的时间区间,也就是从创建到移除的时间间隔。
通常的生存期有以下几种:
永久状态PrmanntStat——应用程序使用的永久数据;
进程状态ProcssStat——只在进程周期内有效;
会话状态SssionStat——和特定的用户会话有关;
消息状态MssagStat——处理某个消息的时间内有效;
缓存技术Mmcachd是一个自由开源的,高性能,分布式内存对象缓存系统。
Mmcachd是以LivJournal旗下DangaIntractiv公司的BradFitzpatric为首开发的一款软件。现在已成为mixi、hatna、Facbook、Vox、LivJournal等众多服务中提高Wb应用扩展性的重要因素。
Mmcachd是一种基于内存的ky-valu存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Mmcachd简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的ky-valu存储系统。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Wb应用的速度、提高可扩展性。
特征mmcachd作为高速运行的分布式缓存服务器,具有以下的特点:
协议简单
基于libvnt的事件处理
内置内存存储方式
mmcachd不互相通信的分布式
支持的语言
许多语言都实现了连接mmcachd的客户端,其中以Prl、PHP为主。仅仅mmcachd网站上列出的有:
PrlPHPPythonRubyC#C/C++Lua……
原生PHP使用mmcachd示例:
rror_rporting(E_ALL~E_NOTICE);
$mc=nw\Mmcachd();
$mc-addSrvr("XXXX.mmcach.rds.aliyuncs.克白灵苏孜阿甫片北京中科白殿疯医院好不好