PHP缓存
一:缓存的概念
1 缓存是什么
缓存是指能够进行高速数据交换的存储器
2 缓存的工作原理
当我们读取数据时,首先会从缓存中获取,如果找到立即返回,如果没有缓存对应数据就会从数据源读取;取回的同时会把相应的数据进行缓存,以便下次访问同一数据源时使用可以从缓存中直接取回。
3 为什么要使用缓存
- 读取速度快,提高用户体验
- 降低了服务器压力,提高了性能
- 提升了并发能力
4 缓存的特性
- 数据的零时性
- 时间的有效性
二:一个PHP的HTTP请求执行过程
- 浏览器 (xxx.com/a.php)->服务器(Apache/Nginx)->php_mod/php-fcdi->执行(a.php)得到内容->返还给(Apache/Nginx)->返还给浏览器解析后用户看到
- 常规php请求执行过程
- 优化后的执行过程
三:缓存的类型
- 前端缓存(var,cookie,local storage)
//优化前 document.getElementById("h_890").value = "890"; var form = document.getElementById("h_890").form; //局部变量优化后 var h_890 = document.getElementById("h_890"); h_890.value="890"; var form = h_890.form; //利用global缓存=>窗口进程内(不刷新) global userList = null; function getUserList(){ if(userList != null){ //处理数据 }else{ //请求数据资源 //global 全局变量 //处理相应的数据 } } //利用cookie缓存=>会话期内(不关闭浏览器) function getUserList(){ var c_name = "h_890",c_val = getCookie(c_name); if(c_val != ''){ //处理数据 }else{ //请求数据资源,返回data setCookie(c_name,data); //处理相应的数据 } } //利用local storage缓存=>最长时间(浏览器关闭仍有效) function getUserList(){ var key = "h_890",val = window.localStorage.getItem(key); if(val != ''){ //处理数据 }else{ //请求数据资源,返回data window.localStorage.setItem(key ,data); //处理相应的数据 } }
2.php静态变量
//最常见的数据库资源 function connect(){ return mysql_connect('localhost','root','root'); } //改良 class Db { private static $db = null; function connect() { if (null === self::$db) { self::$db = mysql_connect('localhost','root','root'); } return self::$db; } } //静态变量升华->单例模式 class Db { static private $_instance = array(); //类实例 private $_db; private $_db_name = "localhost"; private $_db_host = "root"; private $_db_pwd = "root"; static function getInstance() { (NULL === self::$_instance) && self::$_instance = new self(); return self::$_instance; } private function __clone() { } private function __construct() { $this->_db = mysql_connect($this->_db_host, $this->_db_name, $this->_db_pwd); } } $db = Db::getInstance();
3. php扩展缓存简介
- APC PHP PECL 中的一个扩展,小巧,php集成,无需单独安装,且经常有维护哦
- Xcache Lighttpd项目的一部分,国人V5,性能不错,对新版本的php支持不错
- eAccelerator 官方加速器,综合性能最好,支持磁盘存储
4.DB缓存
SELECT SQL_CACHE * FROM TABLE;
SELECT SQL_NO_CACHE * FROM TABLE;
* 高并发时不使用,耗内存,更新频繁影响系统
5.常用缓存组件Memcache
Memcahce是一个高性能的分布式内存对象缓存系统,内不是通过内存里的统一hash(key/value)表来维护
特性1:键长度最大为250个字节
特性2:单独一个value最大为1MB
特性3:单个进程最大使用内存2G
特性4:缓存有效期最大为30D