一、文件
1、缓存配置文件:thinkphp\convention.php
2、缓存文件:thinkphp\library\think\Cache.php
3、驱动目录:thinkphp\library\think\cache\driver,包含8个文件:File.php、Lite.php、Memcache.php、Memcached.php、Redis.php、Sqlite.php、Wincache.php、Xcache.php,通过文件名可知其对应的缓存类型。
 
二、缓存配置
在全局配置文件convention.php中可以看到,type就是驱动方式,默认使用的是File文件驱动,实例化的是\think\cache\driver\File.class。可以通过修改type来使用不同的驱动。
 
三、Cache.php文件分析
$instance-缓存的实例
$readTimes-缓存读取次数
$writeTimes-缓存写入次数
$handler-操作句柄
1、缓存初始化
首先,句柄handler为空时才会去初始化对象,否则直接返回句柄。
其次,通过传入不同的配置信息,连接对应的缓存驱动。
 
2、连接缓存驱动
第50行: $name = md5(serialize($options));  
将配置参数进行序列化(serialize)后,再进行md5操作,得到的结果作为缓存对象索引;
第53行: if (true === $name || !isset(self::$instance[$name])) {}  
检查$instance中是否存在对应索引的缓存对象
第54-56行: $class = false === strpos($type, '\\') ? '\\think\\cache\\driver\\' . ucwords($type) : $type;  
class的名字由type决定,  如果type没有包含反斜线, 则class = \think\cache\driver\.ucwords($type),
而框架是把think作为核心目录的别名,所以其真实路径为\thinkphp\libray\\think\driver\.ucwords($type),
再根据自动加载,去该文件夹下加载对应的对象;
第65行: self::$instance[$name] = new $class($options);  
通过这句代码可以知道init()方法中句柄的内容,是这个方法中创建的缓存对象,并通过第67行的return返回。
connect的目的是:return new \$class(\$option),如果是true,就不存,如果是flase,就存到\$instance[\$name]里面。
 
四、缓存驱动接口
方法名 用途
参数
public static function has($name){}
判断缓存是否存在
$name 缓存变量名
public static function get(\$name, $default = false){}
读取缓存
$name 缓存变量名
$default 默认值
public static function set(\$name, \$value, \$expire = null){}
写入缓存
$name 缓存变量名
$value 存储数据
$expire 有效时间 0为永久
public static function inc(\$name, $step = 1){} 自增缓存
$name 缓存变量名
$step 步长
public static function dec(\$name, $step = 1){}
自减缓存
$name 缓存变量名
$step 步长
public static function rm($name){}
删除缓存
$name 缓存标识
public static function clear($tag = null){}
清除缓存
$tag 标签名
public static function pull($name){}
读取缓存并删除
$name 缓存变量名
public static function remember(\$name, \$value, \$expire = null){}
如果不存在则写入缓存
$name 缓存变量名
$value 存储数据
$expire 有效时间 0为永久
public static function tag(\$name, \$keys = null, \$overlay = false)
缓存标签
$name 标签名
$keys 缓存标识
$overlay 是否覆盖
 

ThinkPHP5.0源码学习之缓存Cache(一)的更多相关文章

  1. ThinkPHP5.0源码学习之缓存Cache(二)

    一.使用Cache类 TP5.0框架默认使用的是File文件缓存驱动,可以修改全局配置文件convention.php中的type,将其改为Redis,这样使用的就是Redis缓存驱动了.

  2. ThinkPHP5.0源码学习之框架启动流程

    ThinkPHP5框架的启动流程图如下: ThinkPHP5的启动流程按照文件分为三步: 1.请求入口(public/index.php) 2.框架启动(thinkphp/start.php) 3.应 ...

  3. ThinkPHP5.0源码学习之注册自动加载

    ThinkPHP5框架的自动注册加载流程如下:

  4. ThinkPHP5.0源码学习之执行应用

    一.应用启动 在/thinkphp/start.php文件中,用一句代码App::run()->send();实现应用的启动. // 执行应用 App::run()->send();   ...

  5. ThinkPHP5.0源码学习之注册错误和异常处理机制

    在base.php文件中,用一句代码\think\Error::register();实现错误和异常处理机制的注册. // 注册错误和异常处理机制 \think\Error::register(); ...

  6. 【Spark2.0源码学习】-1.概述

          Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...

  7. [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...

  8. spark2.0源码学习

    [Spark2.0源码学习]-1.概述 [Spark2.0源码学习]-2.一切从脚本说起 [Spark2.0源码学习]-3.Endpoint模型介绍 [Spark2.0源码学习]-4.Master启动 ...

  9. Spring5.0源码学习系列之浅谈BeanFactory创建

    Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.r ...

随机推荐

  1. html5 css折叠导航栏

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  2. redis 简单的注册

    首页写一个页面 <form method="post" action="hreg.php"> Name:<input type="t ...

  3. IT题库9-线程池的概念和原理

    在什么情况下使用线程池? 1.单个任务处理的时间比较短:2.需要处理的任务的数量大: 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销.2.如不使用线程池,有可能造成系统创建 ...

  4. UDP广播-缓冲区过小

    上次介绍到了关于客户端实时刷新摄像头所识别的图片的一些方法,采用了了UDP广播的技术做处理.理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时 ...

  5. 解决 IntelliJ IDEA Tomcat 控制台中文输出乱码问题

    解决办法 找到安装IDEA的bin目录将idea.exe.vmoptions和idea64.exe.vmoptions两个文件打开分别在文件最末尾添加-Dfile.encoding=UTF-8

  6. ogg同步DDL时,源和目标端表空间名称不同的解决思路

    在OGG同步过程中,经常会碰上有创建表或表空间的同步,往往因为源和目标的平台不同,如aix->linux or linux->windows,这两个平台的表空间也经常不同,在目标端执行DD ...

  7. flutter -webview 报错 err_cleartext_not_permitted

    文件 android\app\src\main\AndroidManifest.xml <manifest xmlns:android="http://schemas.android. ...

  8. [Python数据挖掘]第4章、数据预处理

    数据预处理主要包括数据清洗.数据集成.数据变换和数据规约,处理过程如图所示. 一.数据清洗 1.缺失值处理:删除.插补.不处理 ## 拉格朗日插值代码(使用缺失值前后各5个未缺失的数据建模) impo ...

  9. opencv学习之路(39)、PCA

    一.PCA理论介绍 网上已经有许多介绍pca原理的博客,这里就不重复介绍了.详情可参考 http://blog.csdn.net/zhongkelee/article/details/44064401 ...

  10. 在mmdetection中跑通MaskRCNN

    1.将数据集转化成COCO格式数据集 Kaggle->COCO: https://github.com/pascal1129/airbus_rle_to_coco/blob/master/1_s ...