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"
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 筆
不按自身值排序,而是按指定模式鍵的值排序。
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 (最新在前)
類似 SQL JOIN,可在排序同時獲取關聯鍵的多個欄位。
SORT source_key BY pattern GET pattern1 GET pattern2 ... GET #
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 #) 分組解析。
SORT tag:redis:article
BY article:*->time DESC
GET article:*->title
GET article:*->time
GET #
STORE result_key
result_keyEXPIRE 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 |
EXISTS DEL TYPE KEYS RANDOMKEY RENAME RENAMENX DBSIZE EXPIRE TTL SELECT MOVE FLUSHDB FLUSHALL
SET GET GETSET MGET SETNX MSET MSETNX INCR INCRBY DECR DECRBY
RPUSH LPUSH LLEN LRANGE LTRIM LINDEX LSET LREM LPOP RPOP RPOPLPUSH
SADD SREM SPOP SMOVE SCARD SISMEMBER SINTER SINTERSTORE SUNION SUNIONSTORE SDIFF SDIFFSTORE SMEMBERS SRANDMEMBER
ZADD ZREM ZINCRBY ZRANGE ZREVRANGE ZRANGEBYSCORE ZCARD ZSCORE ZREMRANGEBYSCORE
HSET HGET HMGET HMSET HINCRBY HEXISTS HDEL HLEN HKEYS HVALS HGETALL
SORT key BY pattern LIMIT start end GET pattern ASC|DESC ALPHA
SAVE BGSAVE LASTSAVE SHUTDOWN BGREWRITEAOF
INFO MONITOR SLAVEOF