php的cache

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php的cache相关的知识,希望对你有一定的参考价值。

php cache是存储在哪里?硬盘上,还是内存里,各有什么方法实现吗?
如果是存储在硬盘上,是不是只是减少了和数据库连接的时间?
还有就是PHP 数据库连接池是怎么回事?原理是什么?

大家做网站的时候是用什么模板引擎,smarty?如果服务器不支持那不就用不到了?还是自己编写引擎?

参考技术A 大体可以这样和你说吧。。好理解。。。

1. 内存级缓存。 - xcache memcached等
2. 文件级缓存。(数据缓存和模板缓存) - 就是把一些本来要查询数据库的东西 直接把数据取出来写到文件 用的时候读出来。。。。
3. 模板引擎。。。跟服务器支持不支持没关系。。。。
4. web应用的性能瓶颈通常情况下, 是出现在数据库上的。 包括一些大数据量下的检索等 。
5. 数据库连接池。。额。。。 你说的是长连接吧? PHP本身是。。。那啥的。。。执行完之后就全部销毁了。。。。本回答被提问者采纳
参考技术B php cache就是把动态页面生成静态页面,把动态的内容写成静态的html文件然后放在硬盘上特定的文件夹里(就是设定存放cache的目录),这时候再读取同一个页面的时候,只要页面没过期就直接把cache文件夹里面的那个html文件输出,根本就不用连接数据库了,至于连接池,一般很少用到 参考技术C 1、cache在硬盘上只是内存的一个映射。当有大量的客户端请求时,cache发挥作用当然是由内存提供的。所谓cache消耗内存,但是却可以减少数据库的查询,这两方面的平衡要根据你的网站访问量来配置服务器的硬件性能。cache和静态页面也不能混为一谈,cache是动态变化的,静态页面是不变的。
2、数据库连接池是由数据库管理系统提供的,和php并没有多大关系,原理简单地说就是预置了很多连接通道,当有一个连接请求来的时候,如果有闲置的连接通道,马上就启用,连接线程结束之后又恢复为空闲,如果没有,请求就放在等候队列里。
3、smarty模版用的很多了,所谓模板引擎是由脚本本身支持的,和服务器无关,所以不存在服务器不支持的问题了。
参考技术D cache一般都是存在硬盘上,以文件的形式,不清楚有什么缓存存在内存中,只是觉得php的一个请求完成,应该相应的内存就释放了,放在内存中应该不能起到缓存作用吧,另外内存是服务器非常重要的资源,大量被缓存使用了应该不但性能不见得会提高,反而稳定性崩溃了。。而且了,对于web服务来说,简单的文件读取的时间并不是性能的瓶颈,完全没有必要减少这点io时间;
cache放在硬盘上就相当于把动态的页面变成了静态的,当然减少了数据库连接和读取的时间,而一般数据库是web服务最为重要的部分,就这一点就相当有价值了,另外也减少了php逻辑代码的执行,对性能提高应该是有相当大的意义的,你想如果完全cache到全部变成静态页面了(当然不可能),这还有什么好继续cache的呢?
php数据库连接池没用过,一般来说应该意义也不是太大(可能我不懂),不过一般什么池什么池的都是那么回事,就是把一定数量的资源集中管理,需要就从里面取,用完回收,其实也就是减少了资源创建(初始化)及销毁的开销,如果有php数据库连接池(或者你自己实现连接池),应该也是这个意思追问

你知道不知道PHPCMS是采用什么模板引擎的?你一般做的时候一般是怎么做的?

Alternative PHP Cache ( APC )


简介:

Alternative PHP Cache (APC) 是一个开放自由的PHP opcode 缓存。它的目标是提供一个自由、开放和健全的框架用于缓存和优化 PHP 的中间代码,加快 PHP 执行速度。

常见的 PHP 加速器还有 Eaccelerator、XCache 等。

下载地址:http://pecl.php.net/get/APC-3.1.9.tgz

1、安装 APC

shell > wget http://pecl.php.net/get/APC-3.1.9.tgz

shell > tar zxf APC-3.1.9.tgz -C ../
shell > cd ../APC-3.1.9/

shell > /usr/local/php/bin/phpize

shell > ./configure --with-php-config=/usr/local/php/bin/php-config --enable-apc --enable-apc-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex

shell > make ; make install

2、配置 php.ini

shell > cp /usr/local/php/lib/php/extensions/no-debug-zts-20100525/apc.so /usr/lib64/

shell > vim /usr/local/php/php.ini

extension_dir = /usr/lib64/
extension = apc.so

[APC]
apc.enabled = 1            # 启用 apc
apc.stat = 1               # 是否每次执行脚本时都检查脚本是否被更新
apc.shm_segments = 1       # 共享内存数
apc.shm_size = 30M         # 共享内存大小,按实际内存可调
apc.optimization = 0
apc.num_files_hint = 0
apc.ttl=7200               # 缓存对像生命周期,单位为 秒
apc.user_ttl=7200          # 用户缓存对像生命周期
apc.gc_ttl = 3600 
apc.cache_by_default = on  # 对所有文件启用缓存

## 关于参数请参考官网:http://php.net/manual/zh/apc.configuration.php

3、测试

shell > /usr/local/php/bin/php -m | grep apc
apc

## 说明已经加载成功,可以重启 web 查看 phpinfo 页面

## 重启 php-fpm 报错,可以启动,但是会报错

shell > service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm /etc/init.d/php-fpm: line 53: 8323 Segmentation fault $php_fpm_BIN --daemonize $php_opts failed

shell > tail /usr/local/php/var/log/php-fpm.log

[20-Jan-2015 15:43:33] NOTICE: fpm is running, pid 8325
[20-Jan-2015 15:43:33] NOTICE: ready to handle connections

shell > netstat -anpt | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 8325/php-fpm

## 原因不明 ,使用下面版本替换此版本

下载地址:http://pecl.php.net/get/APC-3.1.13.tgz

## 安装方法跟上面一样,apc.so 直接替换掉即可,重启无报错

以上是关于php的cache的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议

Docker-扩展服务

HTTP请求报文头属性

Nginx系列——内容缓存

pyTorch:如何重置其状态?

nginx实现range请求