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