Laravel Redis / Memcached 內存管理系統

Redis 說明

Redis 是一個高效能、開源的記憶體資料儲存系統,適合用作快取、資料庫、消息佇列等。其特點如下:

  1. 內存資料庫
    所有資料儲存在記憶體中,因此讀寫速度極快。但資料量受限於可用記憶體大小。

  2. 持久性支援
    Redis 支援 RDB(快照)、AOF(追加記錄)等方式,可選擇性儲存到磁碟以保留資料。

  3. 多種資料結構
    支援字串、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等。

  4. 發布 / 訂閱模式(Pub/Sub)
    適用於即時訊息推送與事件通知。

  5. 事務支援
    使用 MULTI/EXEC 指令組成原子性事務。

  6. 快取機制
    可用作資料庫查詢快取,顯著減少資料庫壓力。

  7. 高可用性
    支援主從複製(Replication)、哨兵(Sentinel)、叢集(Cluster)等模式。

  8. 常見用途
    網站快取、即時聊天、排行榜、限流、會話儲存、訊息佇列等。


Redis 使用範例

1. 配置 Redis 連線

.env 設定檔:

REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=null

設定 Laravel 使用 Redis 作為快取驅動:

CACHE_DRIVER=redis

2. 使用 Redis 快取

// 儲存資料到快取(儲存 10 分鐘)
Cache::put('key', 'value', 10);

// 讀取快取資料
$value = Cache::get('key');

3. 使用 Redis 原生命令(via Facade)

use Illuminate\Support\Facades\Redis;

// 儲存值
Redis::set('user:123', 'John Doe');

// 設定過期時間(60 秒)
Redis::expire('user:123', 60);

// 取得值
$userName = Redis::get('user:123');

echo "User Name: " . $userName;

常見 Redis 命令:

  • SET key value EX seconds:儲存並設定過期時間
  • GET key:取得值
  • INCR key:值加一(可作為計數器)
  • EXPIRE key seconds:設定過期秒數

Memcached 說明

Memcached 是輕量級、分布式的記憶體快取系統,適合快取簡單資料以提高效能。

  1. 快速的記憶體快取
    所有資料儲存在記憶體中,不涉及磁碟操作。

  2. 支援分布式
    可在多台伺服器上擴展並實現高可用。

  3. 簡單鍵值結構
    僅支援字串類型的鍵值資料。

  4. 自動過期
    支援設定 TTL,自動刪除過期快取。

  5. 快取替換策略
    預設使用 LRU(最近最少使用)策略。

  6. 多語言支援
    PHP、Python、Java、C# 等皆有支援。

  7. 無持久化機制
    重啟後資料會全部清空,僅用於快取層。


Memcached 使用範例

1. 安裝 Laravel 快取套件(若非 Laravel 專案)

composer require illuminate/cache

2. 設定 Memcached 快取

.env 設定:

CACHE_DRIVER=memcached

config/cache.php 中確認:

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

3. 使用快取範例

// 設定快取(存 5 分鐘)
Cache::put('my_key', 'Hello, Memcached!', 5);

// 取得快取
$my_key = Cache::get('my_key');

echo $my_key;

Redis vs Memcached 比較

功能 / 特性 Redis Memcached
支援資料類型 多種(字串、列表、集合 單一字串類型
持久性支援 支援 RDB / AOF 持久化 不支援
發布 / 訂閱 支援 不支援
分布式支援 支援 Cluster 需手動管理多節點
記憶體效率 相對高(但使用量也高) 較低記憶體消耗
配置複雜度
適合場景 多功能應用、需持久性資料 純快取應用、簡單查詢快取

建議使用時機

  • 使用 Memcached
    如果只需要簡單快取、對資料一致性與持久性要求不高,Memcached 較輕便、效能佳。

  • 使用 Redis
    如果需要進階功能如:

    • 多資料結構操作
    • 訊息發佈/訂閱
    • 限速、計數器
    • 高可用與叢集
    • 持久化儲存
      則 Redis 是更佳選擇。