1. 程式人生 > >[thinkphp 5.0源碼閱讀] 緩存(一)

[thinkphp 5.0源碼閱讀] 緩存(一)

png log cache 表數據 path file類 type 源碼閱讀 mage

保存緩存:

技術分享

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源碼閱讀] 緩存(一)