cache(鍊式操作15)
cache可以用於select、find、value和column方法,以及其衍生方法,使用cache方法後,在快取有效期之內不會再次進行資料庫查詢操作,而是直接取得緩存中的數據,關於數據緩存的類型和設定可以參考快取部分。
下面舉例說明,例如,我們對find方法使用cache方法如下:
Db::table('user')->where('id',5)->cache(true)->find();
第一次查詢結果會被緩存,第二次查詢相同的資料的時候就會直接傳回快取中的內容,而不需要再次進行資料庫查詢操作。
預設情況下, 快取有效期是由預設的快取設定參數決定的,但cache方法可以單獨指定,例如:
Db::table('user')->cache(true,60)->find(); // 或者使用下面的方式 是等效的 Db::table('user')->cache(60)->find();
表示對查詢結果的快取有效期60秒。
cache方法可以指定快取標識:
Db::table('user')->cache('key',60)->find();
指定查詢快取的識別可以使得查詢快取更有效率。
這樣,在外部就可以透過\think\Cache類別直接取得查詢快取的數據,例如:
$result = Db::table('user')->cache('key',60)->find(); $data = \think\facade\Cache::get('key');
cache方法支援設定快取標籤,例如:
Db::table('user')->cache('key',60,'tagName')->find();
快取自動更新
這裡的快取自動更新是指一旦資料更新或刪除後會自動清理快取(下次取得的時候會自動重新快取)。
當你刪除或更新資料的時候,可以呼叫相同key的cache方法,會自動更新(清除)緩存,例如:
Db::table('user')->cache('user_data')->select([1,3,5]); Db::table('user')->cache('user_data')->update(['id'=>1,'name'=>'thinkphp']); Db::table('user')->cache('user_data')->select([1,3,5]);
最後查詢的資料不會受第一條查詢快取的影響,確保查詢和更新或刪除使用相同的快取標識才能自動清除快取。
如果使用主鍵進行查詢和更新(或刪除)的話,無需指定快取標識會自動更新快取
Db::table('user')->cache(true)->find(1); Db::table('user')->cache(true)->where('id', 1)->update(['name'=>'thinkphp']); Db::table('user')->cache(true)->find(1);