[TOC]
* * * * *
# 1 缓存
>>缓存,使用外部存储机制存储框架的运行信息
>相对于配置,缓存可用跨请求使用。
>配置的修改与存储只在当前请求中发挥作用,而缓存的修改与存储则会影响到下个请求。
## 1-1 缓存初始化
### Cache::init()
>>初始化配置中指定类型的缓存
~~~
public static function init(array $options = [])
{
if (is_null(self::$handler)) {
// 自动初始化缓存
if (!empty($options)) {
self::connect($options);
} elseif ('complex' == Config::get('cache.type')) {
self::connect(Config::get('cache.default'));
} else {
self::connect(Config::get('cache'));
}
}
}
~~~
## 1-2 缓存存储连接
### Cache::connect()
>>创建配置中指定类型的缓存存储。
~~~
public static function connect(array $options = [], $name = false)
{
$type = !empty($options['type']) ? $options['type'] : 'File';
if (false === $name) {
$name = md5(serialize($options));
}
if (true === $name || !isset(self::$instance[$name])) {
$class = false !== strpos($type, '\\') ? $type : '\\think\\cache\\driver\\' . ucwords($type);
// 记录初始化信息
App::$debug && Log::record('[ CACHE ] INIT ' . $type, 'info');
if (true === $name) {
return new $class($options);
} else {
self::$instance[$name] = new $class($options);
}
}
self::$handler = self::$instance[$name];
return self::$handler;
}
~~~
>>由上可知缓存机制默认使用File存储,其多种存储驱动实现在(\cache\driver\)目录下
## 1-3切换缓存存储类型
>>可以用来切换缓存的存储类型
### Cache::store()
~~~
public static function store($name)
{
if ('complex' == Config::get('cache.type')) {
self::connect(Config::get('cache.' . $name), strtolower($name));
}
return self::$handler;
}
~~~
# 2 缓存操作
>>缓存的操作包括,存储数据到缓存存储器中,读取缓存存储器中的数据
### Cache::get()
>>读取缓存中数据
~~~
public static function get($name, $default = false)
{
self::init();
self::$readTimes++;
return self::$handler->get($name, $default);
}
~~~
### Cache::set()
>>存储数据到缓存
~~~
public static function set($name, $value, $expire = null)
{
self::init();
self::$writeTimes++;
return self::$handler->set($name, $value, $expire);
}
~~~
### Cache::has()
>>检查缓存数据
~~~
public static function has($name)
{
self::init();
self::$readTimes++;
return self::$handler->has($name);
}
~~~
### Cache::inc()
>>缓存自增
~~~
public static function inc($name, $step = 1)
{
self::init();
self::$writeTimes++;
return self::$handler->inc($name, $step);
}
~~~
### Cache::dec()
>>缓存自减
~~~
public static function dec($name, $step = 1)
{
self::init();
self::$writeTimes++;
return self::$handler->dec($name, $step);
}
~~~
### Cache::rm()
>>删除缓存
~~~
public static function rm($name)
{
self::init();
self::$writeTimes++;
return self::$handler->rm($name);
}
~~~
### Cache::clear()
>>清空缓存
~~~
public static function clear($tag = null)
{
self::init();
self::$writeTimes++;
return self::$handler->clear($tag);
}
~~~
### Cache::tag()
>>带标签缓存
~~~
public static function tag($name, $keys = null, $overlay = false)
{
self::init();
return self::$handler->tag($name, $keys, $overlay);
}
~~~
# 3 内置缓存驱动
>>tp5内置了多种缓存驱动实现不同形式的存储方式。如File,Redis,Memacahce.
>这里简单分析File类缓存驱动
>其他类型缓存接口相似
## 3-1 缓存驱动抽象类(Driver)
### $driver->getCacheKey()
>> 获取缓存标识
~~~
protected function getCacheKey($name)
{
return $this->options['prefix'] . $name;
}
~~~
### $driver->pull()
>>读取缓存并删除
~~~
public function pull($name)
{
$result = $this->get($name, false);
if ($result) {
$this->rm($name);
return $result;
} else {
return null;
}
}
~~~
### $driver->tag()
>>带标签缓存
~~~
public function tag($name, $keys = null, $overlay = false)
{
if (is_null($keys)) {
$this->tag = $name;
} else {
$key = 'tag_' . md5($name);
if (is_string($keys)) {
$keys = explode(',', $keys);
}
$keys = array_map([$this, 'getCacheKey'], $keys);
if ($overlay) {
$value = $keys;
} else {
$value = array_unique(array_merge($this->getTagItem($name), $keys));
}
$this->set($key, implode(',', $value));
}
return $this;
}
~~~
### $driver->setTagItem()
>>设置缓存标签
~~~
protected function setTagItem($name)
{
if ($this->tag) {
$key = 'tag_' . md5($this->tag);
$this->tag = null;
if ($this->has($key)) {
$value = $this->get($key);
$value .= ',' . $name;
} else {
$value = $name;
}
$this->set($key, $value);
}
}
~~~
### $driver->getTagItem()
>>获取缓存标签
~~~
protected function getTagItem($tag)
{
$key = 'tag_' . md5($tag);
$value = $this->get($key);
if ($value) {
return explode(',', $value);
} else {
return [];
}
}
~~~
## 3-2 缓存驱动实现类(File)
### $file->__construct()
>>文件存储缓存构造函数
### $file->init()
>>文件缓存初始化
### $file->getCacheKey()
>>获取变量的存储文件名
### $file->has()
>>判断缓存是否存在
### $file->get()
>> 读取缓存
### $file->set()
>> 写入缓存
### $file->inc()
>>自增缓存
### $file->dec()
>>自减缓存
### $file->rm()
>>删除缓存
### $file->clear()
>>清空缓存
### $file->unlink()
>>文件删除。
- 框架简介
- 简介
- 框架目录
- 根目录
- 应用目录
- 核心目录
- 扩展目录
- 其他目录
- 框架流程
- 启动流程
- 请求流程
- 响应流程
- 框架结构
- 应用组织
- 网络请求
- 路由组织
- 数据验证
- 数据模型(M)
- 数据库连接(Connection)
- 数据库(Db)
- 查询构造(Builder)
- 数据库查询(Query)
- 模型(Model)
- 模板视图(V)
- 视图(View)
- 模板引擎(Think)
- 模板标签库(TagLib)
- 控制器(C)
- 网络响应
- 配置与缓存
- 配置操作
- 缓存操作
- cookie与session
- Cookie操作
- Session操作
- 自动加载
- 钩子注册
- 文件上传
- 分页控制
- 控制台
- 自动构建
- 日志异常调试
- 异常处理
- 代码调试
- 日志记录
- 框架使用
- 1 环境搭建(Server)
- 2 网络请求(Request)
- 3 请求路由(Route)
- 4 响应输出(Response)
- 5 业务处理(Controller)
- 6 数据存取(Model)
- 7 Web界面(View)