首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Redis SORT 命令完整指南:從基礎排序到 BY/GET/STORE 進階模式實戰

     編輯:MySQL 資料庫相關知識

Redis SORT 命令完整實戰指南

SORT 是 Redis 最強大、最複雜的命令之一,時間複雜度 O(N + M log M) (N=待排序列表長度,M=返回元素數)。支援數值/字母排序、外部鍵權重排序、多欄位獲取、結果儲存等進階功能。

基礎排序

數值排序 (預設)

redis> SADD myset 5 1 2 8
redis> SORT myset
1) "1"
2) "2"
3) "5"
4) "8"

字母排序 (需 ALPHA 參數)

redis> SADD myset "c" "a" "b"
redis> SORT myset ALPHA
1) "a"
2) "b"
3) "c"
-- 無 ALPHA 會報錯:ERR One or more scores can't be converted into double

倒序與限制筆數

SORT myset DESC LIMIT 0 2  -- 降序,取前 2 筆

進階模式:BY 外部鍵權重排序

不按自身值排序,而是按指定模式鍵的值排序。

語法

SORT source_key BY weight_pattern_*->field

實戰場景:文章標籤按發布時間排序

-- 資料結構
-- tag:redis:article = {101, 102, 103}  (文章 ID 集合)
-- article:101 -> {time: 1699900000, title: "Redis 入門"}
-- article:102 -> {time: 1699800000, title: "進階技巧"}
-- article:103 -> {time: 1700000000, title: "最佳實踐"}

-- 按時間降序排序文章 ID
SORT tag:redis:article BY article:*->time DESC
-- 返回: 103, 101, 102 (最新在前)

GET 參數:關聯查詢獲取多欄位

類似 SQL JOIN,可在排序同時獲取關聯鍵的多個欄位。

語法

SORT source_key BY pattern GET pattern1 GET pattern2 ... GET #

實戰:獲取文章標題、時間、ID

SORT tag:redis:article 
    BY article:*->time DESC 
    GET article:*->title 
    GET article:*->time 
    GET #

結果 (扁平化陣列)

1) "最佳實踐"      -- article:103 title
2) "1700000000"    -- article:103 time
3) "103"           -- GET # 返回來源元素值 (文章 ID)
4) "Redis 入門"    -- article:101 title
5) "1699900000"
6) "101"
7) "進階技巧"      -- article:102 title
8) "1699800000"
9) "102"

注意: 返回為扁平陣列,客戶端需按 GET 數量 + 1 (GET #) 分組解析。

STORE 參數:結果持久化為 List

SORT tag:redis:article 
    BY article:*->time DESC 
    GET article:*->title 
    GET article:*->time 
    GET # 
    STORE result_key
  • 結果儲存為 List 類型 鍵 result_key
  • 若鍵存在將覆蓋
  • 可配合 EXPIRE result_key 300 設定快取過期

完整參數組合速查表

參數功能可重複範例
BY pattern指定外部權重鍵模式否 (僅一個)BY article:*->score
GET pattern獲取關聯欄位值是 (多個)GET article:*->title
GET #返回來源元素值是GET #
ASC/DESC升序/降序否DESC
ALPHA字母排序模式否ALPHA
LIMIT offset count分頁限制否LIMIT 0 10
STORE key結果存入新鍵 (List)否STORE sorted_result

效能優化核心原則

  1. 減少 N (待排序長度):源集合盡量小,大集合考慮應用層分頁
  2. 減少 M (返回數量):配合 LIMIT 只取所需
  3. 避免大鍵排序阻塞:SORT 會阻塞單執行緒,大集合 (>10萬) 建議離線處理或 Lua 腳本分片
  4. 善用 STORE + EXPIRE:熱門排序結果快取化,避免重複計算

附錄:Redis 核心命令速查分類

展開查看 9 大類 100+ 命令速查表

1. 通用鍵操作

EXISTS DEL TYPE KEYS RANDOMKEY RENAME RENAMENX DBSIZE EXPIRE TTL SELECT MOVE FLUSHDB FLUSHALL

2. 字串操作

SET GET GETSET MGET SETNX MSET MSETNX INCR INCRBY DECR DECRBY

3. List 操作

RPUSH LPUSH LLEN LRANGE LTRIM LINDEX LSET LREM LPOP RPOP RPOPLPUSH

4. Set 集合操作

SADD SREM SPOP SMOVE SCARD SISMEMBER SINTER SINTERSTORE SUNION SUNIONSTORE SDIFF SDIFFSTORE SMEMBERS SRANDMEMBER

5. Sorted Set (ZSet) 操作

ZADD ZREM ZINCRBY ZRANGE ZREVRANGE ZRANGEBYSCORE ZCARD ZSCORE ZREMRANGEBYSCORE

6. Hash 操作

HSET HGET HMGET HMSET HINCRBY HEXISTS HDEL HLEN HKEYS HVALS HGETALL

7. 排序 (List/Set/ZSet)

SORT key BY pattern LIMIT start end GET pattern ASC|DESC ALPHA

8. 持久化控制

SAVE BGSAVE LASTSAVE SHUTDOWN BGREWRITEAOF

9. 遠端控制

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