cache
cache方法用于查詢緩存操作,也是連貫操作方法之一。
cache可以用于select
、find
、value
和column
方法,以及其衍生方法,使用cache
方法后,在緩存有效期之內(nèi)不會(huì)再次進(jìn)行數(shù)據(jù)庫查詢操作,而是直接獲取緩存中的數(shù)據(jù),關(guān)于數(shù)據(jù)緩存的類型和設(shè)置可以參考緩存部分。
下面舉例說明,例如,我們對find方法使用cache方法如下:
Db::table('think_user')->where('id=5')->cache(true)->find();
第一次查詢結(jié)果會(huì)被緩存,第二次查詢相同的數(shù)據(jù)的時(shí)候就會(huì)直接返回緩存中的內(nèi)容,而不需要再次進(jìn)行數(shù)據(jù)庫查詢操作。
默認(rèn)情況下, 緩存有效期是由默認(rèn)的緩存配置參數(shù)決定的,但cache
方法可以單獨(dú)指定,例如:
Db::table('think_user')->cache(true,60)->find();
// 或者使用下面的方式 是等效的
Db::table('think_user')->cache(60)->find();
表示對查詢結(jié)果的緩存有效期60秒。
cache方法可以指定緩存標(biāo)識:
Db::table('think_user')->cache('key',60)->find();
指定查詢緩存的標(biāo)識可以使得查詢緩存更有效率。
這樣,在外部就可以通過\think\Cache
類直接獲取查詢緩存的數(shù)據(jù),例如:
$result = Db::table('think_user')->cache('key',60)->find();
$data = \think\Cache::get('key');
cache
方法支持設(shè)置緩存標(biāo)簽,例如:
Db::table('think_user')->cache('key',60,'tagName')->find();
緩存自動(dòng)更新
這里的緩存自動(dòng)更新是指一旦數(shù)據(jù)更新或者刪除后會(huì)自動(dòng)清理緩存(下次獲取的時(shí)候會(huì)自動(dòng)重新緩存)。
當(dāng)你刪除或者更新數(shù)據(jù)的時(shí)候,可以使用cache方法手動(dòng)更新(清除)緩存,例如:
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]);
最后查詢的數(shù)據(jù)不會(huì)受第一條查詢緩存的影響,確保查詢和更新或者刪除使用相同的緩存標(biāo)識才能自動(dòng)清除緩存。
如果使用find
方法并且使用主鍵查詢的情況,不需要指定緩存標(biāo)識,會(huì)自動(dòng)清理緩存,例如:
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);
最后查詢的數(shù)據(jù)會(huì)是更新后的數(shù)據(jù)。