一、文件
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. Blender学习

    学习顺序(下面为引用他人的视频或博客) 51个必须知道的blender操作 https://www.bilibili.com/video/av4619930/ Blender常用快捷键一览表 http ...

  3. nginx ../logs/nginx.pid" failed (2: No such file or directory)

    [1]nginx.pid相关 (1)可能出现两种场景: 1.1 nginx.pid文件不存在 发生现象:nginx: [error] open() "/usr/local/lib/ubcsr ...

  4. 20175208 《Java程序设计》第六周学习总结

    20175208 <Java程序设计>第六周学习总结 一.教材知识点总结: 第七章 1.内部类: 成员内部类.静态嵌套类.方法内部类.匿名内部类 .(1).内部类仍然是一个独立的类,在编译 ...

  5. 用pdf.js实现在移动端在线预览pdf文件

    用pdf.js实现在移动端在线预览pdf文件1.下载pdf.js    官网地址:https://mozilla.github.io/pdf.js/ 2.配置    下载下来的文件包,就是一个demo ...

  6. 关于eric4和pyqt的入门学习(转)

    在Eric4下用PyQt4编写Python的图形界面程序 转载请注明作者RunningOn 本文是PyQt4的入门教程.网上能搜到其它教程,但我觉得讲得不是很清楚,希望这篇文章对入门者更加有帮助. 先 ...

  7. JavaScript--图片放大镜

    图片放大镜的原理: 两张相同的图片img1和img2,img1上有一个#dd的div,通过鼠标移动dd,根据dd区域内的图片,来裁剪img2的图片,并将img2的图片放大,显示出来 关键词:img1坐 ...

  8. 创建我的vue项目

    vue-cli 全局安装 1.命令行执行:npm install --global vue-cli: ------也可以用这个命令下载新版本 2.安装完成以后 可以输入命令 :vue 回车,可以看到针 ...

  9. MySQL高性能优化规范建议,速度收藏

    数据库命令规范 •所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见 ...

  10. HDU 3565 Bi-peak Number(数位DP)题解

    题意:我们定义每一位先严格递增(第一位不为0)后严格递减的数为峰(比如1231),一个数由两个峰组成称为双峰,一个双峰的价值为每一位位数和,问L~R双峰最大价值 思路:数位DP.显然这个问题和pos有 ...