保存缓存:

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);“ 的由来。

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

读取缓存:

缓存文件中的数据构成:

缓存标签:

转载于:https://www.cnblogs.com/natian-ws/p/7565400.html

[thinkphp 5.0源码阅读] 缓存(一)相关推荐

  1. Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建

    前提 前几天面试的时候,被问过 Spring Boot 的自动配置源码怎么实现的,没看过源码的我只能投降��了. 这不,赶紧来补补了,所以才有了这篇文章的出现,Spring Boot 2. 0 源码阅 ...

  2. FFmpeg5.0源码阅读之AVClass和AVOption

      摘要:本文通过阅读FFmpeg源码来理解FFmpeg中AVOption的实现原理和具体的使用方式.   关键字:AVClss,AVOption,AVOptionRange   版本:FFmpeg5 ...

  3. FFmpeg5.0源码阅读——AVFrame

      摘要:AVFrame是FFmpeg中表示裸数据的结构体,是FFmpeg最重要的结构体之一.本篇文章针对FFmpeg源码理解AVFrame的作用,相关的结构定义以及一些操作API的具体实现.   关 ...

  4. CloudSim 4.0源码阅读笔记(功耗实例)

    文章目录 一.NonPowerAware案例 1.1 基本概述 1.2 云任务/虚机/主机/功耗模型参数设置 1.3 初始化云任务(CloudletList)-如何载入自定义真实数据集中的CPU利用率 ...

  5. 【Laravel3.0.0源码阅读分析】文件缓存类file.php

    <?php namespace Laravel\Cache\Drivers;class File extends Driver {/*** The path to which the cache ...

  6. AFNetworking 3.0源码阅读 - AFURLResponseSerialization

    这次来说一下AFURLResponseSerialization这个HTTP响应类. 定义了一个协议,该协议返回序列化后的结果.后续的AFHTTPResponseSerializer以及他的子类都遵循 ...

  7. 【Laravel3.0.0源码阅读分析】文件类file.php

    <?php namespace Laravel; use Closure, FilesystemIterator as fIterator;class File {/*** Determine ...

  8. FFmpeg5.0源码阅读——avformat_open_input

      摘要:本文主要描述了FFmpeg中用于打开文件接口avformat_open_input的具体调用流程,详细描述了该接口被调用时所作的具体工作.   关键字:ffmpeg.avformat_ope ...

  9. FFmpeg5.0源码阅读——av_interleaved_write_frame

      摘要:本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数av_interleaved_write_frame的实现.   关键字:av_interleaved_write_fram ...

最新文章

  1. 编写高质量代码 Web前端开发修炼之道 读书笔记
  2. win2003 服务器超出最大连接+强制重启服务器(方法)
  3. QQ窗口的控制,同步异步打开360网盘,控制360网盘窗口的移动
  4. .net core 24
  5. vscode python第三方库检测_VSCode中使用Pylint检查python代码
  6. java根据exif旋转,关于图片文件旋转JPEG与EXIF信息
  7. java五层架构_Web五层架构
  8. 计算机更换桌面图片,桌面图片高清怎么换?桌面图片怎么美化?
  9. 第三十九章 Caché 函数大全 $MATCH 函数
  10. python连接Oracle数据库报错Cannot locate a 64-bit Oracle Client library问题
  11. Unity塔防游戏学习(六)
  12. DxDiag中字段结构
  13. android studio按键精灵,按键精灵要点讲解一 - godlike的个人页面 - OSCHINA - 中文开源技术交流社区...
  14. nrf uart for android,nrf connect
  15. android图片压缩总结2
  16. ctf题库--这是什么鬼东西
  17. Java打板_AI 打板模型原理与实践
  18. win11更新后任务栏空白电脑卡死怎么办?
  19. 软件工程---5.系统建模
  20. 如何免费的、完整的把 PDF 转换为 Word? 分享三个转换方法

热门文章

  1. Linux服务器安全配置实例(二)用户账户权限配置
  2. 关于大小端、位域的一些概念
  3. Spring的beans标签下可以有其他标签
  4. HTTP协议是无状态协议,怎么理解
  5. eclipse调试的时候查看变量出现com.sun.jdi.InvocationException occurred invoking method.
  6. web管理 pdo-mysql_PHP重新安装启用PDO扩展和PDO_MySQL扩展
  7. 如何检索Python函数的源代码
  8. linux开源软件_为什么要使用Linux和开源软件?
  9. 当OpenOrg和OpenGov发生冲突时
  10. patricia tree_前5名:专访Patricia Torvalds和Ada Initiative,印度采用开源,等等