回到最上方

文件

Redis

介紹

Redis 是一個開放原始碼,一個進階的 key-value 儲存資料庫,他也參考了伺服器的資料資料結構,所以資料可以包含 字串 (strings)hashes清單 (lists)集合 (sets)有順序的集合 (sorted sets)

注意: 如果你有透過 PECL 安裝 Redis PHP 套件的話,你需要重新命名在 app/config/app.php 檔案中 Redis 使用套件的設定。

設置

你的應用程式 Redis 相關設定將存放在 app/config/database.php 檔案中,在這個檔案裡你會看到 redis 陣列,陣列內包含 Redis 伺服器的相關設定:

'redis' => array(

    'cluster' => true,

    'default' => array('host' => '127.0.0.1', 'port' => 6379),

),

預設的伺服器設定應該可以滿足你開發上的需求,當然你也可以根據你的開發環境,去修改這些設定,因為只需要給予每個伺服器的 名字,並且指定 host 及 port 即可。

cluster參數是告 ​​訴Laravel中的Redis客戶端對所有的Redis節點執行客戶端側的分片(sharding),這就賦予你將創建一個節點池,並使用大量的RAM的能力。然而,客戶端的分片機制不能夠處理失效切換,因此,這種方式主要用來訪問其它主數據容器中存放的緩存數據。 cluster 選項會告訴 Laravel Redis 用戶端去執行跨 Redis 節點的 sharding ,允許你建立 Redis 節點池 (Pool) ,並建立一可使用的大量記憶體,然而用戶端 sharding 沒辦法處理錯誤時的切換,所以主要適合快取其他主要的儲存資料。

使用

可以使用 Redis::connection 方法,去取得 Redis 實例:

$redis = Redis::connection();

這將會給你一個預設的 Redis 伺服器實例,假如你沒有使用伺服器分群,你可以傳送伺服器名稱至 connection 方法中,去取得定義在你 Redis 設定檔中特定的伺服器:

$redis = Redis::connection('other');

一旦獲取到Redis類的實例,我們就可以向其發送任何Redis命令了。Laravel使用一些魔術方法向Redis服務器傳送命令: 只要你獲得 Redis 用戶端的實例後,我們就可以任何 Redis 指令 到這個實例了,Laravel使用一些方法傳送指令到 Redis 伺服器:

$redis->set('name', 'Taylor');

$name = $redis->get('name');

$values = $redis->lrange('names', 5, 10);

注意,向 Redis 指令傳送的參數簡單的將其傳送到方法中,當然你也可以不使用這些方法,你可以使用 command 方法傳送指令到 Redis 伺服器:

$values = $redis->command('lrange', array(5, 10));

只要使用 Redis 類別靜態的方法,就可以簡單的執行指令到預設的 Redis 連線實例中:

Redis::set('name', 'Taylor');

$name = Redis::get('name');

$values = Redis::lrange('names', 5, 10);

注意: Redis 快取Session 的驅動是包含在 Laravel 框架中

管線化

當你需要在同一個操作中,傳送多個指令到伺服器中,就需要使用管線 (Pipelining) ,在開始使用 Redis 時,使用 pipeline 指令即可:

管線 (Piping) 傳送多個指令到 Redis 伺服器

Redis::pipeline(function($pipe)
{
    for ($i = 0; $i < 1000; $i++)
    {
        $pipe->set("key:$i", $i);
    }
});

討論