ThinkPHP5.0源碼學習之緩存Cache(一)


一、文件
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 是否覆蓋
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM