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

Redis 入門完整指南:核心命令、資料結構、持久化與 PHP 實戰

     編輯:PHP 相關知識

Redis 入門完整指南:核心命令、資料結構、持久化與 PHP 實戰

Redis(Remote Dictionary Server)是高效能記憶體鍵值資料庫,支援豐富資料結構、持久化、主從複寫、Lua 腳本等特性,廣泛用於快取、Session 儲存、排行榜、分散式鎖、訊息佇列等場景。本文系統整理核心命令、五大資料類型操作、兩種持久化機制與 PHP 操作範例。

一、Redis vs Memcached 快速對比

特性RedisMemcached
資料結構String, List, Hash, Set, Sorted Set, Bitmap, HyperLogLog, Stream單純 Key-Value (String)
持久化RDB 快照 + AOF 日誌不支援
單值大小上限512 MB1 MB
複寫架構Master-Slave、Cluster、SentinelClient 端一致性雜湊
適用場景複雜資料操作、需持久化、排行榜、發布訂閱純快取、簡單 Key-Value、超大物件

二、五大核心資料類型與常用命令

1. String(字串)

SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
MGET key1 key2 ...
INCR key / DECR key / INCRBY key 5
APPEND key value
STRLEN key

2. List(雙向鏈表)

LPUSH key val1 val2 ...   # 頭部插入
RPUSH key val1 val2 ...   # 尾部插入
LPOP key / RPOP key       # 彈出
LRANGE key 0 -1           # 取全部
LTRIM key 0 99            # 保留前 100
LLEN key                  # 長度
# 應用:最新登入用戶、訊息佇列

3. Hash(雜湊表)

HSET key field value
HGET key field
HGETALL key
HMSET key f1 v1 f2 v2 ...
HINCRBY key field 1
# 應用:用戶資料、商品屬性、物件儲存

4. Set(無序集合)

SADD key member1 member2 ...
SREM key member
SMEMBERS key
SCARD key
SISMEMBER key member
SINTER key1 key2 ...      # 交集
SUNION key1 key2 ...      # 並集
SDIFF key1 key2 ...       # 差集
# 應用:共同好友、標籤系統、去重

5. Sorted Set(有序集合)

ZADD key score member
ZRANGE key 0 -1 WITHSCORES
ZREVRANGE key 0 -1        # 分數降序
ZRANK key member          # 排名 (升序)
ZREVRANK key member       # 排名 (降序)
ZINCRBY key 1 member
ZREMRANGEBYRANK key 0 9   # 移除前 10
# 應用:排行榜、延遲佇列、加權隨機

三、Key 通用管理命令

EXISTS key
DEL key1 key2 ...
TYPE key
KEYS pattern      # 生產環境慎用,改用 SCAN
EXPIRE key 60 / PEXPIRE key 60000
TTL key / PTTL key
RENAME key newkey
RENAMENX key newkey
MOVE key 1        # 移至 DB 1
FLUSHDB / FLUSHALL
DBSIZE

四、持久化機制深度解析

1. RDB(快照持久化)

  • 配置 redis.conf:save 900 1、save 300 10、save 60 10000
  • 手動觸發:BGSAVE(非阻塞)、SAVE(阻塞)
  • 優點:檔案緊湊、適合備份、重啟恢復快
  • 缺點:可能丟失最後一次快照後的資料

2. AOF(追加式日誌)

  • 配置:appendonly yes、appendfsync everysec(預設,折中)
  • 重寫壓縮:BGREWRITEAOF 合併同一 Key 多次操作
  • 優點:資料更安全、可秒級恢復
  • 缺點:檔案較大、恢復較慢

3. 混合持久化(Redis 4.0+)

aof-use-rdb-preamble yes
# 重寫時產生 RDB 開頭 + AOF 尾部,兼具快速啟動與資料安全

五、PHP 操作 Redis 完整範例

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// $redis->auth('password'); // 若有密碼

// 選擇資料庫 (0-15)
$redis->select(0);

// String
$redis->set('site', 'example.com');
$redis->setex('token', 3600, 'abc123');
echo $redis->get('site');

// Hash - 用戶資料
$redis->hMSet('user:1001', ['name' => 'John', 'age' => 28, 'city' => 'Taipei']);
$user = $redis->hGetAll('user:1001');

// List - 最新動態
$redis->lPush('feed:latest', 'post_101');
$redis->lPush('feed:latest', 'post_102');
$latest = $redis->lRange('feed:latest', 0, 9);

// Sorted Set - 排行榜
$redis->zAdd('rank:score', 95, 'user_A');
$redis->zAdd('rank:score', 87, 'user_B');
$top3 = $redis->zRevRange('rank:score', 0, 2, true); // WITHSCORES

// Pipeline 批次執行 (減少 RTT)
$pipe = $redis->multi(Redis::PIPELINE);
for ($i = 0; $i < 1000; $i++) {
    $pipe->set("key:$i", "val:$i");
}
$pipe->exec();

// 連線池建議:使用 phpredis 5.3+ 的 RedisArray 或 Swoole/Workerman 長連線

六、生產環境關鍵配置建議

  • maxmemory-policy:allkeys-lru 或 volatile-lru 避免 OOM
  • slowlog-log-slower-than:10000 (10ms) 監控慢指令
  • client-output-buffer-limit:保護 Pub/Sub、Replica 緩衝區
  • bind 127.0.0.1 + requirepass:網路與認證雙重防護
  • 禁用高危指令:rename-command FLUSHDB ""、rename-command KEYS ""

七、總結

Redis 憑藉多樣資料結構、亞毫秒延遲、靈活持久化成為現代架構核心組件。掌握五大類型適用場景、持久化權衡、Pipeline/事務/ Lua 腳本進階用法,並配合合理的記憶體淘汰策略與監控告警,即可在高併發系統中穩定發揮最大效能。

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