??laravel-cache 緩存系統(tǒng)支持本地files/redis/memcached/database

安裝
-
php 7.x
composer require shopwwi/laravel-cache illuminate/cache ^8.0
-
php 8.x
composer require shopwwi/laravel-cache
-
注意:如果提示你的php版本過(guò)高 一般都是由illuminate/cache或者illuminate/filesystem版本過(guò)低導(dǎo)致 添加版本安裝即可
composer require shopwwi/laravel-cache illuminate/cache ^10.0 illuminate/filesystem ^10.0
配置文件
//路徑 config/laravelcache.php
支持驅(qū)動(dòng)
- apc
- array
- file 本地緩存
- redis 緩存
- memcached 緩存
- database 數(shù)據(jù)庫(kù)緩存
- dynamodb
- octane
緩存使用
獲取緩存實(shí)例
要獲取緩存存儲(chǔ)實(shí)例,您可以使用 Cache Facade
,我們將在本文檔中使用它。Cache Facade
提供了對(duì) Laravel
緩存合約底層實(shí)現(xiàn)的方便、簡(jiǎn)潔的訪問(wèn):
<?php
namespace app\controller;
use Shopwwi\LaravelCache\Cache;
class UserController extends Controller
{
/**
* 顯示應(yīng)用程序的所有用戶的列表。
*
* @return Response
*/
public function index()
{
$value = Cache::get('key');
//
}
}
訪問(wèn)多個(gè)緩存存儲(chǔ)
使用 Cache Facade
,您可以通過(guò) store
方法訪問(wèn)各種緩存存儲(chǔ)。傳遞給store
方法的鍵應(yīng)該對(duì)應(yīng)于 cache
配置文件中的 stores
配置數(shù)組中列出的存儲(chǔ)之一:
$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 600); // 10 Minutes
從緩存中檢索項(xiàng)目
Cache
門(mén)面的 get
方法用于從緩存中檢索項(xiàng)目。如果緩存中不存在該項(xiàng)目,則將返回 null
。如果您愿意,您可以將第二個(gè)參數(shù)傳遞給 get
方法,指定您希望在項(xiàng)目不存在時(shí)返回的默認(rèn)值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');
您甚至可以將閉包作為默認(rèn)值傳遞。如果指定的項(xiàng)在緩存中不存在,則返回閉包的結(jié)果。傳遞閉包允許您推遲從數(shù)據(jù)庫(kù)或其他外部服務(wù)中檢索默認(rèn)值:
$value = Cache::get('key', function () {
return Db::table(...)->get();
});
檢查項(xiàng)目是否存在
has
方法可用于確定緩存中是否存在項(xiàng)目。如果項(xiàng)目存在但其值為null
,此方法也將返回 false
:
if (Cache::has('key')) {
//
}
遞增 / 遞減值
increment
和 decrement
方法可用于調(diào)整緩存中整數(shù)項(xiàng)的值。這兩種方法都接受一個(gè)可選的第二個(gè)參數(shù),指示增加或減少項(xiàng)目值的數(shù)量:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
檢索和存儲(chǔ)
有時(shí)您可能希望從緩存中檢索一個(gè)項(xiàng)目,但如果請(qǐng)求的項(xiàng)目不存在,也存儲(chǔ)一個(gè)默認(rèn)值。例如,您可能希望從緩存中檢索所有用戶,或者,如果它們不存在,則從數(shù)據(jù)庫(kù)中檢索它們并將它們添加到緩存中。您可以使用 Cache::remember
方法執(zhí)行此操作:
$value = Cache::remember('users', $seconds, function () {
return Db::table('users')->get();
});
如果緩存中不存在該項(xiàng),則傳遞給 remember
方法的閉包將被執(zhí)行,并將其結(jié)果放入緩存中。
您可以使用 rememberForever
方法從緩存中檢索一個(gè)項(xiàng)目,或者如果它不存在則永久存儲(chǔ)它:
$value = Cache::rememberForever('users', function () {
return Db::table('users')->get();
});
檢索和刪除
如果您需要從緩存中檢索一個(gè)項(xiàng)目然后刪除該項(xiàng)目,您可以使用 pull
方法。 與 get
方法一樣,如果緩存中不存在該項(xiàng),則將返回 null
:
$value = Cache::pull('key');
在緩存中存儲(chǔ)項(xiàng)目
您可以使用 Cache Facade
上的 put
方法將項(xiàng)目存儲(chǔ)在緩存中:
Cache::put('key', 'value', $seconds = 10);
如果存儲(chǔ)時(shí)間沒(méi)有傳遞給 put
方法,該項(xiàng)目將被無(wú)限期存儲(chǔ):
Cache::put('key', 'value');
除了將秒數(shù)作為整數(shù)傳遞之外,您還可以傳遞一個(gè)表示緩存項(xiàng)所需過(guò)期時(shí)間的 DateTime
實(shí)例:
Cache::put('key', 'value', now()->addMinutes(10));
如果不存在則存儲(chǔ)
add
方法只會(huì)將緩存存儲(chǔ)中不存在的項(xiàng)目添加到緩存中。如果項(xiàng)目實(shí)際添加到緩存中,該方法將返回 true
。 否則,該方法將返回 false
。 add
方法是一個(gè)原子操作:
Cache::add('key', 'value', $seconds);
永久存儲(chǔ)
forever
方法可用于將項(xiàng)目永久存儲(chǔ)在緩存中。由于這些項(xiàng)目不會(huì)過(guò)期,因此必須使用 forget
方法手動(dòng)將它們從緩存中刪除:
Cache::forever('key', 'value');
技巧:如果您使用的是 Memcached
驅(qū)動(dòng)程序,則當(dāng)緩存達(dá)到其大小限制時(shí),可能會(huì)刪除「永久」存儲(chǔ)的項(xiàng)目。
從緩存中刪除項(xiàng)目
您可以使用 forget
方法從緩存中刪除項(xiàng)目:
Cache::forget('key');
您還可以通過(guò)提供零或負(fù)數(shù)的過(guò)期秒數(shù)來(lái)刪除項(xiàng)目:
Cache::put('key', 'value', 0);
Cache::put('key', 'value', -5);
您可以使用 flush
方法清除整個(gè)緩存:
Cache::flush();
緩存標(biāo)簽
存儲(chǔ)緩存標(biāo)簽
緩存標(biāo)簽允許您在緩存中標(biāo)記相關(guān)項(xiàng)目,然后刷新所有已分配給定標(biāo)簽的緩存值。您可以通過(guò)傳入標(biāo)記名稱的有序數(shù)組來(lái)訪問(wèn)標(biāo)記緩存。例如,讓我們?cè)L問(wèn)一個(gè)標(biāo)記的緩存并將一個(gè)值「put」緩存中:
Cache::tags(['people', 'artists'])->put('John', $john, $seconds);
Cache::tags(['people', 'authors'])->put('Anne', $anne, $seconds);
訪問(wèn)緩存標(biāo)簽
要檢索標(biāo)記的緩存項(xiàng),請(qǐng)將相同的有序標(biāo)簽列表傳遞給 tags
方法,然后使用您要檢索的鍵調(diào)用 get
方法:
$john = Cache::tags(['people', 'artists'])->get('John');
$anne = Cache::tags(['people', 'authors'])->get('Anne');
刪除緩存標(biāo)簽
您可以刷新所有分配了標(biāo)簽或標(biāo)簽列表的項(xiàng)目。例如,此語(yǔ)句將刪除所有標(biāo)記為「people」、「authors」或兩者的緩存。 因此,Anne
和 John
都將從緩存中刪除:
Cache::tags(['people', 'authors'])->flush();
相反,此語(yǔ)句將僅刪除帶有 authors
標(biāo)記的緩存值,因此將刪除 Anne
,但不會(huì)刪除 John
:
Cache::tags('authors')->flush();
更多文檔請(qǐng)查看laravel官方文檔 如果你覺(jué)得這個(gè)插件幫助到你 希望你前往github點(diǎn)上你的小星星!同樣如果你遇到問(wèn)題 你可以通過(guò)isuse聯(lián)系到我 或者8988354@qq.com