Laravel-smartcache 一款基於yac/apcu的laravel二級快取擴充套件包
二級快取器,基於APCu/Yac。
如果本擴充套件幫助到了你 歡迎star。laravel-smartcache
如果本擴充套件有任何問題或有其他想法 歡迎提 issue與pull request。
安裝
composer require lysice/laravel-smartcache
將服務提供者新增入app.php
'providers' => [
...
\Lysice\Cache\CacheServiceProvider::class
]
配置
data_connection
Redis的資料連線,指定要同步資料到哪個Redis連線。cache_type
記憶體快取選擇兩種模式\Lysice\Cache\Constants::CACHE_TYPE_YAC 基於Yac 該選項需要安裝php的yac擴充套件 \Lysice\Cache\Constants::CACHE_TYPE_APCU 基於APCu 該選項需要安裝apcu的擴充套件
sync_mode
同步模式const SYNC_MODE_PUBSUB = 1; 非同步訂閱模式, 使用Redis的訂閱來同步資料到Redis 該選項需要執行`php artisan 2cache:sync &` 且保證該命令高可用。 const SYNC_MODE_SYNC = 2; 同步模式,當設定快取時直接設定Redis資料。 const SYNC_MODE_JOB = 3; 佇列模式 將Redis的快取設定任務分配到佇列 該模式需要您開啟佇列且保證佇列高可用。一般使用`supervisor`
pub_connection
Redis的訂閱連線 當同步模式為SYNC_MODE_PUBSUB
時使用。注意,Redis的訂閱連線為阻塞連線 需要保證資料連線data_connection
與pub_connection
不是同一個連線。
這種模式的缺點是會浪費一個Redis
的DB
redis_channel
Redis的訂閱渠道 當同步模式為SYNC_MODE_PUBSUB
時使用。log
是否記錄簡單日誌
使用
CacheManager
的方法定義如下
remember(string $key, int $ttl, Callable $callback){}
如果您習慣使用Facade
模式 首先加入Facade
'aliases' => [ 'SecondaryCache' => \Lysice\Cache\SecondaryCache::class ],
然後使用:
$ttl = 10 * 60;
$key = 'your key';
$result = SecondaryCache::remember($key, $ttl, function () {
return [ 'cached' => true ];
});
或者您也可以直接按照如下使用
app(CacheManager::class)->remember(
'your key',
'your ttl',
function () {
return [ 'cached' => 1 ];
});
需要注意的是 首次返回的資料為您自己定義的 $callback
中的資料。如果您返回的是陣列 則快取時會將資料 json_encode
後儲存。
當您第二次訪問,取到的資料為快取資料,此時您應該將資料反序列化為陣列。
另外,在laravel中大量使用了 collection,由於collection資料量太大,因此在開發中並未考慮callback
返回collection
的情況。建議使用者直接返回陣列。
單獨使用
如果您覺得本擴充套件的remember方法不好用可以基於本擴充套件提供的類直接操作。
以下本擴充套件提供的類
RedisInstance
YacInstance
APCu
以上三個類實現了CacheConcern
介面 因此提供方法:/** public function set($key, $value, $ttl); 設定快取 支援陣列。$key = ['key' => 'value'] $value = null public function update($key, $old, $new); 更新快取 public function clear(); 清除快取 public function decrease($key = '', $step = 1, $ttl = 0); 計數減少 public function delete($keys); 刪除快取 public function exists($keys); 是否存在 public function get($key); 獲取快取 public function increase($key = '', $step = 1, $ttl = 0); 計數增加 public function info(); 返回快取資訊
如果本擴充套件幫助到了你 歡迎star。
如果本擴充套件有任何問題或有其他想法 歡迎提 issue與pull request。
本作品採用《CC 協議》,轉載必須註明作者和本文連結