[擴充套件]Laravel-smartcache 基於Yac/APCu 與Redis的二級快取器

南城以南發表於2021-05-14

Laravel-smartcache 一款基於yac/apcu的laravel二級快取擴充套件包

二級快取器,基於APCu/Yac。

如果本擴充套件幫助到了你 歡迎star。laravel-smartcache

如果本擴充套件有任何問題或有其他想法 歡迎提 issue與pull request。

Yac官方文件

APCu官方文件

安裝

 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_connectionpub_connection不是同一個連線。
    這種模式的缺點是會浪費一個RedisDB
  • 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 協議》,轉載必須註明作者和本文連結

相關文章