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);
管線化
當你需要在同一個操作中,傳送多個指令到伺服器中,就需要使用管線 (Pipelining) ,在開始使用 Redis 時,使用 pipeline
指令即可:
管線 (Piping) 傳送多個指令到 Redis 伺服器
Redis::pipeline(function($pipe)
{
for ($i = 0; $i < 1000; $i++)
{
$pipe->set("key:$i", $i);
}
});