您的位置:首页 > 运维架构 > Apache

[李景山php]thinkphp核心源码注释|Apachenote.class.php

2016-07-22 09:23 573 查看
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Think\Cache\Driver;
use Think\Cache;
defined('THINK_PATH') or exit();
/**
* Apachenote缓存驱动
*/
// 乍一看,没搞懂
// so 百度了一下,
// apache_note — 取得或设置 apache 请求记录
class Apachenote extends Cache {

/**
* 架构函数
* @param array $options 缓存参数
* @access public
*/
// 初始化,初始化配置,然后开启缓存。
public function __construct($options=array()) {
if(!empty($options)) { // 重置选项
$this->options =  $options;
}
if(empty($options)) { // 否则设置默认选项
$options = array (
'host'        =>  '127.0.0.1',
'port'        =>  1042,
'timeout'     =>  10,
);
}
$this->options  =   $options;
$this->options['prefix']    =   isset($options['prefix'])?  $options['prefix']  :   C('DATA_CACHE_PREFIX');
$this->options['length']    =   isset($options['length'])?  $options['length']  :   0;
$this->handler = null;
$this->open();
}
/**
* 打开缓存
* @access private
*/
private function open() {
if (!is_resource($this->handler)) { // 这个函数是个好函数,is_resource
$this->handler = fsockopen($this->options['host'], $this->options['port'], $_, $_, $this->options['timeout']);
}
// fsockopen — 打开一个网络连接或者一个Unix套接字连接
// 初始化一个套接字连接到指定主机(hostname)。
}

//////////////////////////////// 明日继续
/**
* 关闭缓存
* @access private
*/
private function close() { // 弱弱的关闭连接  打开方式是 fsockopen
fclose($this->handler);
$this->handler = false;
}
/**
* 读取缓存
* @access public
* @param string $name 缓存变量名
* @return mixed
*/
// 获取远程 缓存文件
public function get($name) {
$this->open();
// 打开连接
$name  =   $this->options['prefix'].$name; // 设置连接名字
$s     =   'F' . pack('N', strlen($name)) . $name; // 组合真正的连接名字
// pack() 函数把数据装入一个二进制字符串。
fwrite($this->handler, $s); // 写入连接

for ($data = ''; !feof($this->handler);) {
$data .= fread($this->handler, 4096);
}// 读取其连接
N('cache_read',1);  // 进行步进统计
$this->close();// 关闭连接
return $data === '' ? '' : unserialize($data); // 返回数据
}
// 好的,感谢了,今日就到这里了。

//  缓存最后一单  周末由于感冒 未能及时发布,周一补上,感谢各位!
/**
* 写入缓存
* @access public
* @param string $name 缓存变量名
* @param mixed $value  存储数据
* @return boolean
*/
// 首先我们可以先不细读这个代码,一般情况下,遇到set 这个函数,就啥也不说了
// 设置其内部 不方便外人道的变量
public function set($name, $value) {
N('cache_write',1);// 记录写
$this->open();// 开启连接句柄,单列就是这个好处,随从都可以开启,反而不消耗内存。牛叉!赞一个
$value  =   serialize($value);// 序列化 简直就是神器啊
$name   =   $this->options['prefix'].$name; // 防止重命名的一个 项目前缀也是比不可少的。
$s      =   'S' . pack('NN', strlen($name), strlen($value)) . $name . $value;
// pack 返回一个二进制的字符串,不知道,干什么用的。
fwrite($this->handler, $s); // 写入数据
$ret = fgets($this->handler); // 获取结果集  第一行
$this->close();
if($ret === "OK\n") {// 如果第一行是ok
if($this->options['length']>0) {
// 记录缓存队列
$this->queue($name);
}
return true;
}
return false;
}

/**
* 删除缓存
* @access public
* @param string $name 缓存变量名
* @return boolean
*/
// 删除文件
public function rm($name) {
$this->open();
$name   =   $this->options['prefix'].$name;
$s      =   'D' . pack('N', strlen($name)) . $name; // 获取
fwrite($this->handler, $s); // 写入数据
$ret    = fgets($this->handler);// 获取数据
$this->close(); // 关闭
return $ret === "OK\n"; // 返回 运算结果
}
// 总结,作为一个缓存系列的文件
// 函数设计的很实在 初始化
// 单列设置  连接
// 关闭连接
// 获取、 设置、 删除,
// 就可以了,
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: