1. 程式人生 > >laravel5.5緩存系統

laravel5.5緩存系統

logs 存在 必須 clear 永久 默認值 緩存系統 tags 序列化

[toc]

Laravel 為各種後端緩存提供豐富而統一的 API,而其配置信息位於 config/cache.php 文件中,Laravel 默認使用 file 緩存驅動,將序列化的緩存對象保存在文件系統中。

1 Redis的配置

這裏僅探討redis緩存配置的一些內容

1.1 安裝PRedis

PRedis是PHP訪問redis的擴展包,只需要下載原碼即可,不需要安裝PHP擴展(如php-redis.so)。我們使用composer安裝

composer require predis/predis 1.0.*

1.2 配置

  • 默認情況下,Redis 服務會提供 16 個數據庫,Laravel 使用數據庫 0 (請見 Redis 文檔)作為緩存和 Session 的存儲。
  • 當你在執行命令 php artisan cache:clear 的時候,會把 Session 也連帶清除了,導致所有用戶需要重新登錄。
  • 我們的目的是讓緩存,也就是默認的 Redis 存儲到 0 號數據庫,Session 存儲在 1 號數據庫。(‘database‘ => 0,‘database‘ => 1)

1.2.1 配置redis數據庫

應用的Redis配置位於config/database.php,你可以基於環境隨意修改該數組,只需要給每個Redis服務器一個名字並指定該Redis服務器使用的主機和接口。

'redis' => [

    'cluster' => false,

    //默認的redis服務器
    'default' => [
        'host'     => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port'     => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

    //供session使用的
    'session' => [
        'host'     => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port'     => env('REDIS_PORT', 6379),
        'database' => 1,
    ],

    //配置更多的redis服務器...

],

1.2.2 更改session的配置

  • 方式1 修改 config/session.php

     'driver' => env('SESSION_DRIVER', 'redis'),  //指定session使用的方式
  • 方式2 開發環境下可以修改 .env 文件的配置

    SESSION_DRIVER=redis

    測試一下,執行以下命令後檢查下是否退出登錄:

    php artisan cache:clear

1.2.3 更改cache配置

修改config/cache.php 文件

'default' => env('CACHE_DRIVER', 'redis'),

'stores' => [
    'apc' => [
        'driver' => 'apc',
    ],
    'file' => [
        'driver' => 'file',
        'path'   => storage_path('framework/cache'),
    ],
    // 其它一些配置省略了...
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
    ],
],

分析:

  • 配置文件
    ```
    //config/database.php文件 配置redis連接

// config/session.php文件 更改session方式
‘driver‘ => env(‘SESSION_DRIVER‘, ‘redis‘)

//config/cache.php文件 更改緩存方式
‘default‘ => env(‘CACHE_DRIVER‘, ‘redis‘)


- .env文件

CACHE_DRIVER=file
SESSION_DRIVER=redis

REDIS_HOST=192.168.1.248
REDIS_PASSWORD=null
REDIS_PORT=6379


.env可以方便的配置我們的開發環境,但是正式環境建議更改對應配置文件

## 1.3 使用redis

我們可以在Redis門面上以靜態方法的方式調用Redis客戶端提供的任何命令( Redis命令大全 ),然後Laravel使用魔術方法將命令傳遞給Redis服務器並返回獲取的結果。

使用前提是引入Redis門面

use Illuminate\Support\Facades\Redis;

一些基本使用

Redis::set(‘key‘,‘value‘); //存入redis
Redis::get(‘key‘); //獲取redis中的值
Redis::lLen(‘key‘); //隊列的長度
Redis::rpop(‘key‘); //右側出隊列
Redis::rpush(‘key‘,‘value‘); //右側存入隊列
Redis::exists($key) //redis是否存在這個鍵








# 2 緩存的使用

你可以使用 Cache facade 來訪問緩存

// 通過store方法訪問各種緩存存儲
$value = Cache::store(‘file‘)->get(‘foo‘);
Cache::store(‘redis‘)->put(‘bar‘, ‘baz‘, 10);

// 從緩存中獲取數據
$value = Cache::get(‘key‘);
$value = Cache::get(‘key‘, ‘default‘);
// 你甚至可以傳遞 Closure 作為默認值。如果指定的數據不存在於緩存中,將返回 Closure 的結果
$value = Cache::get(‘key‘, function () {
return DB::table(...)->get();
});

// 確認項目是否存在
Cache::has(‘key‘)

// 遞增與遞減值,第二個可選參數,用來指示要遞增或遞減值的數量
Cache::increment(‘key‘);
Cache::increment(‘key‘, $amount);
Cache::decrement(‘key‘);
Cache::decrement(‘key‘, $amount);

// 有時你可能想從緩存中找出一個數據,而當在請求的數據不存在時,程序能為你存儲默認值
$value = Cache::remember(‘users‘, $minutes, function () {
return DB::table(‘users‘)->get();
});

// 使用 rememberForever 方法從緩存中查找數據或永久存儲它
$value = Cache::rememberForever(‘users‘, function() {
return DB::table(‘users‘)->get();
});

// 從緩存中獲取到數據之後再刪除它,和 get 方法一樣,如果緩存中不存在該數據, 則返回 null
$value = Cache::pull(‘key‘);

// put 方法來將數據存儲到緩存中,你需要使用第三個參數來設定緩存的過期時間:
Cache::put(‘key‘, ‘value‘, $minutes);
// 除了以整數形式傳遞過期的分鐘數,還可以傳遞一個 DateTime 實例來表示該數據的過期時間:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put(‘key‘, ‘value‘, $expiresAt);

// 只存儲沒有的數據, 果存放成功返回 true ,否則返回 false :
Cache::add(‘key‘, ‘value‘, $minutes);

// 數據永久存儲,這些緩存數據不會過期,所以必須通過 forget 方法從緩存中手動刪除它們:
Cache::forever(‘key‘, ‘value‘);

// 刪除緩存中數據
Cache::forget(‘key‘);

// 清空所有緩存,慎用
Cache::flush();


還可以使用cache輔助函數

$value = cache(‘key‘);

cache([‘key‘ => ‘value‘], $minutes);

cache([‘key‘ => ‘value‘], Carbon::now()->addSeconds(10));


# 3. 緩存標記

緩存標記並不支持使用 file 或 database 的緩存驅動。

1. 寫入

所謂的緩存標記,就是對緩存的數據打上相關的標記,以便清空所有被分配指定標記的緩存值。你可以通過傳入標記名稱的**有序數組**來為緩存數據寫入標記。

Cache::tags([‘people‘, ‘artists‘])->put(‘John‘, $john, $minutes);

Cache::tags([‘people‘, ‘authors‘])->put(‘Anne‘, $anne, $minutes);


2. 訪問

若要獲取一個被標記的緩存數據,請將相同的**有序標記數組**傳遞給 tags 方法,然後調用 get 方法來獲取你要檢索的鍵:

$john = Cache::tags([‘people‘, ‘artists‘])->get(‘John‘);

$anne = Cache::tags([‘people‘, ‘authors‘])->get(‘Anne‘);

3. 移除

你可以清空有單個標記或是一組標記的所有緩存數據。例如,下面的語句會刪除被標記為 people、authors 或兩者都有的緩存。所以,Anne 與 John 都會從緩存被刪除:

Cache::tags([‘people‘, ‘authors‘])->flush();

相比之下,下面的語句只會刪除被標記為 authors 的緩存,所以 Anne 會被移除,但 John 不會:

Cache::tags(‘authors‘)->flush();
```

laravel5.5緩存系統