一、文件
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. javascript学习-基本类型

    javascript学习-基本类型 1.概述 javascript的数据类型大体上分两种:基本类型和对象类型.简单的区分就是基本类型是无法再分的原子级类型:对象类型是容器,可以容纳基本类型和对象类型. ...

  2. C#-----类DateTime的常用方法

    1.TryParse(string s, out DateTime result)    将日期和时间的指定字符串表示形式转换为其 System.DateTime 等效项,并返回一个指示转换是否成功的 ...

  3. iOS进阶之使用 NSURLProtocol 拦截 HTTP 请求(转载)

    这篇文章会提供一种在 Cocoa 层拦截所有 HTTP 请求的方法,其实标题已经说明了拦截 HTTP 请求需要的了解的就是 NSURLProtocol. 由于文章的内容较长,会分成两部分,这篇文章介绍 ...

  4. Java中的String为什么是不可变的? -- String源码分析

    众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是, ...

  5. WebService的调用

    今天测试用代码如何去调用WebService,因为之前都是直接vs直接引用,网上搜索的很多也并没有讲清楚,搞得一直不得劲.其实基元对象(string/int等)的调用倒是挺简单的,根据方法名赋值传参就 ...

  6. sonarqube安装部署

    环境:Os:Centos 71.下载下载地址:https://www.sonarqube.org/sonarqube-7-7/我这里下载的是sonarqube-7-7sonarqube-7.7.zip ...

  7. Tomcat在Window控制台下启动时乱码的两种解决办法

    在命令提示符中启动Tomcat时,日志窗口出现乱码: 乱码的原因肯定是日志解码错误引起的,因此就有一系列问题: 1.这个窗口的文本编码是什么? 窗口的文本编码查看:右击窗口>选项 可以看到窗口的 ...

  8. 图像旋转、伸缩的自写matlab实现

    一.图像的旋转 今天的代码不是自己写的,缺少一些时间.但是认认真真推导了一下旋转的公式,代码的思想与原博博主一致,致敬! 愚以为,自己来实现图像旋转算法的关键点有二:其一,确定旋转后的图像边界.其二, ...

  9. Linux Git用户组

    Vivien: groupadd admin useradd -d /home/bill -s /bin/bash -m bill 用户组 查看用户列表 cat /etc/passwd 或者 cat ...

  10. JsTree 最详细教程及完整实例

    JsTree是一个jquery的插件,它提交一个非常友好并且强大的交互性的树,并且是完全免费或开源的(MIT 许可).Jstree技持Html 或 json格式的的数据, 或者是ajax方式的动态请求 ...