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);