一:缓存的概念
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