首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Redis 基礎入門:從安裝到核心數據結構實戰指南

     編輯:DB2 教學

什麼是 Redis?

Redis(Remote Dictionary Server)是由 Salvatore Sanfilippo 開發的開源、高效能、基於記憶體的鍵值儲存系統,常被歸類為 NoSQL 資料庫。它支援豐富的資料結構,包括字串、雜湊、列表、集合、有序集合等,這使其遠超傳統鍵值存儲的功能。

鍵值存儲的本質在於:將資料存入後,透過鍵名即可快速檢索。Redis 將所有資料保存在記憶體中,讀寫速度極快,常用於快取、會話儲存、即時分析、排行榜、計數器等場景。

Redis 的適用場景

雖然 Redis 功能強大,但創作者曾指出它不適合完全替代關係型資料庫(RDBMS),主要因為在事務操作與主從同步機制上尚不成熟。以下是 Redis 的典型應用場景:

  • 高效能快取:類似 Memcached,但支援多種資料結構,減少陣列拼接開銷。
  • 排行榜與即時統計:有序集合天然適合排名場景。
  • 計數器:原子性增減操作(INCR/DECR)極適合高併發計數。
  • 即時分析與過濾:集合運算(交集、並集、差集)支援複雜過濾邏輯。
  • 最新項目展示:列表結構可高效維護最新動態。

安裝 Redis

Linux 環境安裝

Redis 在 Linux 上安裝非常簡單,以下以 2.8.19 版本為例(實際使用請替換為最新穩定版):

$ wget https://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make

編譯完成後,可執行檔位於 src 目錄下,包含 redis-server(服務端)與 redis-cli(客戶端)。啟動服務:

$ src/redis-server

Windows 環境

Windows 版本官方不再直接維護,建議使用 Docker 或 WSL 運行 Linux 版本,或下載社群移植版(如 Microsoft 維護的分支)。

PHP 連接 Redis:使用 Predis 客戶端

Predis 是 PHP 社群廣泛使用的 Redis 客戶端,支援自動載入與彈性配置。

安裝 Predis

$ git clone git://github.com/nrk/predis.git

建立連接

<?php
require "predis/autoload.php";
Predis\Autoloader::register();

try {
    // 本地連接(預設 127.0.0.1:6379)
    $redis = new Predis\Client();

    // 遠程連接範例(如虛擬機環境)
    /* $redis = new Predis\Client([
        "scheme" => "tcp",
        "host"   => "192.168.1.100",
        "port"   => 6379
    ]); */
} catch (Exception $e) {
    die("連接失敗: " . $e->getMessage());
}
echo "Redis 連接成功!";

Redis 核心資料類型與操作

五大基礎資料結構

類型說明典型指令
String二進位安全字串,最基礎類型SET, GET, INCR
List雙向鏈表,支援頭尾插入刪除LPUSH, RPUSH, LPOP, LRANGE
Hash欄位-值映射表,適合物件儲存HSET, HGET, HGETALL, HMSET
Set無序不重複字串集合SADD, SREM, SISMEMBER, SMEMBERS
Sorted Set帶分數的有序不重複集合ZADD, ZRANGE, ZSCORE, ZRANK

字串操作:基礎讀寫與計數

<?php
// 基礎 SET/GET/EXISTS
$redis->set('message', 'Hello World');
$value = $redis->get('message');           // "Hello World"
$exists = $redis->exists('message');       // true

// 原子性計數器
$redis->set('counter', 0);
$redis->incr('counter');    // 1
$redis->incr('counter');    // 2
$redis->decr('counter');    // 1

// 指定步長增減
$redis->incrby('counter', 15); // 16
$redis->decrby('counter', 10); // 6

列表操作:隊列與棧的基礎

<?php
$redis->rpush('languages', 'french');   // [french]
$redis->rpush('languages', 'arabic');   // [french, arabic]
$redis->lpush('languages', 'english');  // [english, french, arabic]
$redis->lpush('languages', 'swedish');  // [swedish, english, french, arabic]

$redis->lpop('languages');   // 移除 swedish
$redis->rpop('languages');   // 移除 arabic
$redis->llen('languages');   // 2
$redis->lrange('languages', 0, -1); // 取得所有元素
$redis->lrange('languages', 0, 1);  // 取得前兩個

雜湊操作:物件儲存的最佳選擇

<?php
$key = 'user:linus';
$redis->hset($key, 'age', 44);
$redis->hset($key, 'country', 'finland');
$redis->hset($key, 'occupation', 'software engineer');

// 批量設定
$redis->hmset($key, [
    'age' => 44,
    'country' => 'finland',
    'occupation' => 'software engineer',
    'reknown' => 'linux kernel'
]);

// 讀取單一欄位
$age = $redis->hget($key, 'age'); // 44

// 遞增數值欄位
$redis->hincrby($key, 'age', 1); // 45

// 取得所有欄位
$data = $redis->hgetall($key);

集合操作:去重與關係運算

<?php
$key = 'countries';
$redis->sadd($key, 'china');
$redis->sadd($key, ['england', 'france', 'germany']);
$redis->sadd($key, 'china'); // 自動去重,被忽略

$redis->srem($key, ['england', 'china']);
$redis->sismember($key, 'england'); // false
$members = $redis->smembers($key);  // ['france', 'germany']

過期時間與持久化控制

Redis 將資料存放在記憶體中,透過過期機制避免佔用過多資源。常用指令:

  • EXPIRE key seconds:設定秒級過期時間
  • EXPIREAT key timestamp:設定 UNIX 時間戳過期
  • TTL key:查看剩餘生存時間(-1 為無過期,-2 為鍵不存在)
  • PERSIST key:移除過期時間,永久保存
<?php
$key = 'session:user_123';
$redis->expire($key, 3600);           // 1 小時後過期
$redis->expireat($key, time() + 3600); // 同上
sleep(600); // 模擬經過 10 分鐘
$ttl = $redis->ttl($key);             // 3000 秒(50 分鐘)
$redis->persist($key);                // 永久保存

總結與展望

Redis 以其極致的效能、豐富的資料結構、支援主從複制與高可用架構,已成為現代應用架構中不可或缺的基礎設施。Facebook、Twitter、Instagram 等大型平台均大規模採用 Redis 替代 Memcached。開源社群持續貢獻補丁,功能日益完善(如 Redis 6.0 引入 ACL、執行緒 I/O、Redis 7.0 支援函數與模組 API 等)。

掌握 Redis 基礎操作與資料結構特性,能幫助開發者設計出高效能、可擴展的系統架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved