phpredis 是 PHP 的一個高效能擴展,專為 Redis 鍵值存儲系統設計。它提供了豐富的功能,包括鏈表排序、事務處理、發布/訂閱模式等,非常適合構建高效能的內存級業務模塊。本文整理了 Redis 官方推薦的命令使用技巧,幫助開發者快速上手。
項目地址:https://github.com/owlient/phpredis(支援 Redis 2.0.4+)
$redis = new Redis();
// 短連接
$redis->connect('127.0.0.1', 6379, 2.5); // host, port, timeout(秒)
// 長連接(不會主動關閉)
$redis->pconnect('127.0.0.1', 6379, 2.5);
$redis->ping(); // 返回 +PONG 表示連接正常
| 方法 | 說明 | 範例 |
|---|---|---|
| get(key) | 獲取字符串值,不存在返回 false | $val = $redis->get('key'); |
| set(key, value) | 寫入字符串,成功返回 true | $redis->set('key', 'value'); |
| setex(key, ttl, value) | 帶過期時間寫入(秒) | $redis->setex('key', 3600, 'value'); |
| setnx(key, value) | 僅當 key 不存在時寫入 | $redis->setnx('key', 'value'); |
| delete(key1, key2...) | 刪除指定 key,返回刪除數量 | $redis->delete('key1', 'key2'); |
| ttl(key) | 獲取剩餘生存時間(秒) | $ttl = $redis->ttl('key'); |
| persist(key) | 移除過期時間,永久保存 | $redis->persist('key'); |
| mset(array) | 批量設定多個 key-value | $redis->mset(['k1'=>'v1', 'k2'=>'v2']); |
// 事務模式(原子性執行)
$redis->multi(Redis::MULTI)
->incr('counter')
->set('status', 'active')
->exec(); // 執行事務
// 管道模式(高效能批量發送,無原子性保證)
$redis->multi(Redis::PIPELINE)
->set('a', 1)
->set('b', 2)
->exec();
// 取消事務
$redis->discard();
$redis->lPush('list', 'value'); // 左側插入
$redis->rPush('list', 'value'); // 右側插入
$redis->lPop('list'); // 移除並返回左側元素
$redis->rPop('list'); // 移除並返回右側元素
$redis->lSize('list'); // 獲取長度
$redis->lRange('list', 0, -1); // 獲取範圍元素(-1 表示結尾)
// 阻塞式彈出(適合佇列消費者)
$redis->blPop('key1', 'key2', 10); // 等待 10 秒
// 元素操作
$redis->lSet('list', 0, 'newVal'); // 指定索引設值
$redis->lTrim('list', 0, 99); // 截取保留前 100 個
$redis->lRem('list', 'val', 2); // 刪除 2 個 'val'
$redis->lInsert('list', Redis::AFTER, 'pivot', 'newVal'); // 在 pivot 後插入
// 彈出並推入另一列表
$redis->rpoplpush('srcList', 'dstList');
$redis->sAdd('set', 'member'); // 添加成員
$redis->sRem('set', 'member'); // 移除成員
$redis->sMove('src', 'dst', 'mem'); // 移動成員
$redis->sIsMember('set', 'mem'); // 判斷是否存在
$redis->sCard('set'); // 獲取基數
$redis->sPop('set'); // 隨機彈出
$redis->sRandMember('set'); // 隨機獲取(不刪除)
// 集合運算
$redis->sInter('s1', 's2'); // 交集
$redis->sUnion('s1', 's2'); // 並集
$redis->sDiff('s1', 's2'); // 差集
$redis->sInterStore('out', 's1', 's2'); // 交集存儲
$redis->sMembers('set'); // 獲取所有成員
$redis->zAdd('zset', 10, 'member'); // 添加(score 排序)
$redis->zRange('zset', 0, -1); // 正序獲取
$redis->zRevRange('zset', 0, -1); // 倒序獲取
$redis->zRangeByScore('zset', 0, 100); // 按分數範圍查詢
$redis->zRem('zset', 'member'); // 刪除成員
$redis->zIncrBy('zset', 5, 'member'); // 增加分數
$redis->zRank('zset', 'member'); // 獲取排名(正序)
$redis->zCard('zset'); // 獲取基數
$redis->zScore('zset', 'member'); // 獲取分數
// 多集合運算
$redis->zUnion('out', ['z1', 'z2'], [1, 2], 'SUM');
$redis->zInter('out', ['z1', 'z2'], [1, 2], 'MIN');
$redis->hSet('hash', 'field', 'value'); // 設定字段
$redis->hGet('hash', 'field'); // 獲取字段
$redis->hMset('hash', ['f1'=>'v1', 'f2'=>'v2']); // 批量設定
$redis->hMGet('hash', ['f1', 'f2']); // 批量獲取
$redis->hGetAll('hash'); // 獲取所有
$redis->hDel('hash', 'field'); // 刪除字段
$redis->hExists('hash', 'field'); // 判斷字段存在
$redis->hIncrBy('hash', 'field', 10); // 字段增量
$redis->hKeys('hash'); // 獲取所有字段
$redis->hVals('hash'); // 獲取所有值
$redis->hLen('hash'); // 獲取字段數
$redis->keys('user*'); // 模式匹配鍵
$redis->exists('key'); // 判斷鍵存在
$redis->type('key'); // 獲取類型
$redis->rename('old', 'new'); // 重命名
$redis->expire('key', 300); // 設定過期(秒)
$redis->expireAt('key', time()+300); // 設定過期時間戳
$redis->ttl('key'); // 獲取剩餘時間
$redis->persist('key'); // 移除過期
$redis->randomKey(); // 隨機獲取一個鍵
$redis->dbSize(); // 當前資料庫鍵數
$redis->select(1); // 切換資料庫
$redis->move('key', 1); // 移動鍵到其他庫
$redis->flushDB(); // 清空當前庫
$redis->flushAll(); // 清空所有庫
// 發布者
$redis->publish('channel', 'message');
// 訂閱者(回調模式)
$redis->subscribe(['channel1', 'channel2'], function($redis, $chan, $msg) {
echo "收到訊息: $msg 來自 $chan";
});
$redis->sort('key', [
'by' => 'pattern_*', // 外部鍵排序
'limit' => [0, 10], // 分頁
'get' => 'pattern_*', // 獲取外部值
'sort' => 'desc', // 排序方向
'alpha' => true, // 字母排序
'store' => 'result_key' // 結果存儲
]);
$redis->setBit('key', 10, 1); // 設定位
$redis->getBit('key', 10); // 獲取位
$redis->bitCount('key'); // 統計 1 的數量
$redis->bitOp('AND', 'dest', 'k1', 'k2'); // 位運算