保存缓存:

user表数据:

cache()方法保存缓存:

访问 http://mythinkphp.com/index/index/cache ,两个缓存被保存(runtime/cache目录下):

来看其中一个缓存文件:\runtime\cache\7e\58d63b60197ceb55a1c487989a3720.php

<?php
//000000003600a:2:{i:0;a:4:{s:2:"id";i:1;s:4:"name";s:2:"ss";s:3:"age";i:24;s:3:"sex";i:1;}i:1;a:4:{s:2:"id";i:2;s:4:"name";s:2:"jj";s:3:"age";i:23;s:3:"sex";i:2;}}
?>

很明显数据被序列化了。取a:2:{i:0;a:4:{s:2:"id";i:1;s:4:"name";s:2:"ss";s:3:"age";i:24;s:3:"sex";i:1;}i:1;a:4:{s:2:"id";i:2;s:4:"name";s:2:"jj";s:3:"age";i:23;s:3:"sex";i:2;}}

解序列化:

可见数据确实被序列化之后保存到了文件。

进入到代码:

通过 “Cache::set('user1',$user,3600);” 和 "use think\Cache;" 找到 Cache 类的 set() 方法:

再跟进 self::init()

根据打印出来的数据可以看出,init()初始化了一些缓存的配置,比如:缓存类型(type), 缓存路径(path)等。

再进入 Config::get()看看:

返回了缓存文件配置信息。手册中还这样介绍:

所以用户的缓存信息配置将会进入到connect()函数:

connect()返回了一个对象(File类实例化),至此完成了一系列的初始化工作,进入到了\thinkphp\library\think\cache\driver\File.php

set() 方法完成了将缓存写入文件的工作。

再来看看缓存文件名 ”$filename = $this->getCacheKey($name);“ 的由来。

至此缓存数据写入到了文件中。

读取缓存:

缓存文件中的数据构成:

缓存标签:

[thinkphp 5.0源码阅读] 缓存(一)的更多相关文章

  1. Yii2.0源码阅读-一次请求的完整过程

    Yii2.0框架源码阅读,从请求发起,到结束的运行步骤 其实最初阅读是从yii\web\UrlManager这个类开始看起,不断的寻找这个类中方法的调用者,最终回到了yii\web\Applicati ...

  2. Vue2.0源码阅读笔记--生命周期

    一.Vue2.0的生命周期 Vue2.0的整个生命周期有八个:分别是 1.beforeCreate,2.created,3.beforeMount,4.mounted,5.beforeUpdate,6 ...

  3. Vue2.0源码阅读笔记(四):nextTick

      在阅读 nextTick 的源码之前,要先弄明白 JS 执行环境运行机制,介绍 JS 执行环境的事件循环机制的文章很多,大部分都阐述的比较笼统,甚至有些文章说的是错误的,以下为个人理解,如有错误, ...

  4. Vue2.0源码阅读笔记--双向绑定实现原理

    上一篇 文章 了解了Vue.js的生命周期.这篇分析Observe Data过程,了解Vue.js的双向数据绑定实现原理. 一.实现双向绑定的做法 前端MVVM最令人激动的就是双向绑定机制了,实现双向 ...

  5. Yii2.0源码阅读-从路由到控制器

    之前的文章弄清了一次请求的开始到结束.主要讲了Yii Applicaton实例的创建.初始化,UrlManager如何返回Yii中的路由信息,到runAction,最后将Response发送给客户端. ...

  6. Yii2.0源码阅读-视图(View)渲染过程

    之前的文章我们根据源码的分析,弄清了Yii如何处理一次请求,以及根据解析的路由如何调用控制器中的action,那接下来好奇的可能就是,我在控制器action中执行了return $this->r ...

  7. Vue2.0源码阅读笔记(二):响应式原理

      Vue是数据驱动的框架,在修改数据时,视图会进行更新.数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触.而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的 ...

  8. Vue2.0源码阅读笔记(一):选项合并

      Vue本质是上来说是一个函数,在其通过new关键字构造调用时,会完成一系列初始化过程.通过Vue框架进行开发,基本上是通过向Vue函数中传入不同的参数选项来完成的.参数选项往往需要加以合并,主要有 ...

  9. spark1.1.0源码阅读-executor

    1. executor上执行launchTask def launchTask( context: ExecutorBackend, taskId: Long, taskName: String, s ...

随机推荐

  1. hashcode native

    hashcode Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值. 在设计hashCode方法和equal ...

  2. Python 学习笔记(基础语法 restful 、 Flask 和 Requests)

    input 函数 #!/usr/bin/env python3 name = input("\n\n按下 enter 键后退出.") print(name) print() 在 p ...

  3. P1439 【模板】最长公共子序列(LCS)

    先来看一看普通的最长公共子序列 给定字符串A和B,求他们的最长公共子序列 DP做法: 设f[i][j]表示A[1~i]和B[1~j]的最长公共子序列的长度 那么f[i][j]=max(f[i-1][j ...

  4. UITextView输入中文时限制字数

    最近因为项目中输入用户简称时限制长度,被测试部多次提交问题,最终将解决方法分享给大家. 刚开始用最简单的方法,在textView的代理方法里面做处理 - (void)textViewDidChange ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_1_HashSet集合介绍

    特点:不允许有重复的记录,无序的集合 set不允许重复.接口中没有索引.所以方法和Collection中的方法是一样的,没有带索引的方法 因为Set的方法和Collection都是一样的.所以这里不再 ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_6_LinkedHashSet集合

    把www挪到最上面,第一个加入到哈希

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_6_字节输出流写多个字节的方法

    一次写多个字节的方法 要在txt内显示100.49代表1 48 代表0 一次写多个字节 负数前两个组成一个中文.-65和-66 字节数组的一部分 写入字符串方法 当前用的编码格式是utf-8,utf- ...

  8. jmeter之分布式压测

    很多性能大牛说一台机器的压测其实不准确,于是搜索网上的分布式压测练习了一番 目录 1.环境准备 2.控制机和压测机配置 3.执行分布式压测 1.环境准备 1.1准备一台windows作为控制机(mas ...

  9. 记2018最后一次问题诊断-Spark on Yarn所有任务运行失败

    2018的最后一个工作日,是在调式和诊断问题的过程中度过,原本可以按时下班,毕竟最后一天了,然鹅,确是一直苦苦挣扎. 废话不多说,先描述一下问题:有一套大数据环境,是CDH版本的,总共4台机子,我们的 ...

  10. DEDECMS首页,列表页调用自定义图片字段,只显示图片地址

    第一步:将自定义字段“图片”类型改为“图片(仅地址)”类型. 第二部:在{dede:arclist row='1' addfields='stu' titlelen='24' orderby='pub ...