php 数据缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 数据缓存相关的知识,希望对你有一定的参考价值。
smarty是页面缓存,我现在需要数据缓存。 思路是对一些经常不变的数据(这些数据需要从数据库读取的)写入到一个文件中,以后直接从文件读取,而不是从数据库中查询,这样提高了速度。 可是我现在的问题是,如果数据库中的数据变化了,我怎么知道以便更新我的缓存文件? 通常的做法是什么? 请简单介绍一下思路可以吗?我们公司的数据非常庞大,我需要各种途径来缓解压力,提高速度。 如果有相关资料,请给我一个网址链接也可以,谢谢 问题补充: 呵呵,不好意思,我的分没了,所以还是感谢你的回答了。 我感觉第一种方法不是很好,比如有些数据可能很少更新,但是一旦更新我就想让他直接生效才行。 所以,用时间来控制不是很好。 第二种比较好点吧,我刚开始想到的就是第二种,只不过我还想到网上看看有没有咋比较好的方法,呵呵。 第二种方法意思就是写程序的时候,如果数据有了更新,就告诉缓存文件,需要更新了,呵呵,是这个意思吧?不过这样程序可能多费点心咯。。 这是通用的做法吗?我没研究开源的软件,不知道他们是怎么处理这个问题的,有什么高见可以再补充
参考技术A 看你的具体需求是怎样的了,eaccelerator.,
xcache
等
还有一种就是文件缓存
这种一般是
用php自己实现的
没什么可说的一种是对
页面结果的缓存
应用服务器级别的
软件如
squid
一种是
内存级别的
一般是对
php
频繁调用的并且如果每次查询会消耗大量资源的数据
软件有
memcached
一种是
对php
程序进行优化编码的缓存
如
apache
里面的
apc
PHP缓存
1. ob缓存(输出缓存)(需开启)
php.ini设置中开启并设置输出缓存大小:output_buffering = 4096
ob_start() 开启当前脚本页面的输出缓存
如果输出缓存打开,则输出的数据先放到输出缓存(header函数前可以有输出),否则直接放入程序缓存。
header()函数发送的内容直接放入程序缓存。
开启输出缓存后,输出缓存数据会刷新到程序缓存,然后有Apache封装成http响应包返回给浏览器。
输出缓存:存放的数据是从开启输出缓存开始返回给浏览器的所有静态页面数据!
2. 程序缓存(内部缓存,必须存在,不能关闭)
3. 浏览器缓存
/* ob缓存(输出控制) */ Output Buffering
ob_start() //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。
ob_start(‘ob_gzhandler‘); //将gz编码的数据发送到支持压缩页面的浏览器
ob_clean(); //删除内部缓冲区的内容,不关闭缓冲区(不输出)。
ob_end_clean(); //删除内部缓冲区的内容,关闭缓冲区(不输出)。
ob_get_clean(); //返回内部缓冲区的内容,关闭缓冲区。相当于执行ob_get_contents()与ob_end_clean()
ob_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
ob_end_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。
ob_get_flush(); //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。
flush(); //将当前为止程序的所有输出发送到用户的浏览器
ob_get_contents(); //返回缓冲区的内容,不输出。
ob_get_length(); //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。
ob_get_level(); //Return the nesting level of the output buffering mechanism.
ob_get_status(); //获取ob状态信息
ob_implicit_flush(); //打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出。
ob_gzhandler //ob_start回调函数,用gzip压缩缓冲区的内容。
ob_list_handlers //List all output handlers in use
output_add_rewrite_var //Add URL rewriter values
output_reset_rewrite_vars //Reset URL rewriter values
这些函数的行为受php_ini设置的影响:
output_buffering //该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。
output_handler //该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
implicit_flush //作用同ob_implicit_flush,默认为Off。
//ob缓存作用
1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
以上是关于php 数据缓存的主要内容,如果未能解决你的问题,请参考以下文章