SORT?命令的最簡單執行形式為:
~~~
SORT <key>
~~~
這個命令可以對一個包含數字值的鍵?`key`?進行排序。
以下示例展示了如何使用?SORT?命令對一個包含三個數字值的列表鍵進行排序:
~~~
redis> RPUSH numbers 3 1 2
(integer) 3
redis> SORT numbers
1) "1"
2) "2"
3) "3"
~~~
服務器執行?`SORT?numbers`?命令的詳細步驟如下:
1. 創建一個和?`numbers`?列表長度相同的數組, 該數組的每個項都是一個?`redis.h/redisSortObject`?結構, 如圖 IMAGE_CREATE_ARRAY 所示。
2. 遍歷數組, 將各個數組項的?`obj`?指針分別指向?`numbers`?列表的各個項, 構成?`obj`?指針和列表項之間的一對一關系, 如圖 IMAGE_POINT_OBJ 所示。
3. 遍歷數組, 將各個?`obj`?指針所指向的列表項轉換成一個?`double`?類型的浮點數, 并將這個浮點數保存在相應數組項的?`u.score`?屬性里面, 如圖 IMAGE_SET_SCORE 所示。
4. 根據數組項?`u.score`?屬性的值, 對數組進行數字值排序, 排序后的數組項按?`u.score`?屬性的值從小到大排列, 如圖 IMAGE_SORTED 所示。
5. 遍歷數組, 將各個數組項的?`obj`?指針所指向的列表項作為排序結果返回給客戶端: 程序首先訪問數組的索引?`0`?, 返回?`u.score`?值為`1.0`?的列表項?`"1"`?; 然后訪問數組的索引?`1`?, 返回?`u.score`?值為?`2.0`?的列表項?`"2"`?; 最后訪問數組的索引?`2`?, 返回?`u.score`?值為`3.0`?的列表項?`"3"`?。
其他?`SORT?<key>`?命令的執行步驟也和這里給出的?`SORT?numbers`?命令的執行步驟類似。




以下是?`redisSortObject`?結構的完整定義:
~~~
typedef struct _redisSortObject {
// 被排序鍵的值
robj *obj;
// 權重
union {
// 排序數字值時使用
double score;
// 排序帶有 BY 選項的字符串值時使用
robj *cmpobj;
} u;
} redisSortObject;
~~~
SORT?命令為每個被排序的鍵都創建一個與鍵長度相同的數組, 數組的每個項都是一個?`redisSortObject`?結構, 根據?SORT?命令使用的選項不同, 程序使用?`redisSortObject`?結構的方式也不同, 稍后介紹?SORT?命令的各種選項時我們會看到這一點。
- 介紹
- 前言
- 致謝
- 簡介
- 第一部分:數據結構與對象
- 簡單動態字符串
- SDS 的定義
- SDS 與 C 字符串的區別
- SDS API
- 重點回顧
- 參考資料
- 鏈表
- 鏈表和鏈表節點的實現
- 鏈表和鏈表節點的 API
- 重點回顧
- 字典
- 字典的實現
- 哈希算法
- 解決鍵沖突
- rehash
- 漸進式 rehash
- 字典 API
- 重點回顧
- 跳躍表
- 跳躍表的實現
- 跳躍表 API
- 重點回顧
- 整數集合
- 整數集合的實現
- 升級
- 升級的好處
- 降級
- 整數集合 API
- 重點回顧
- 壓縮列表
- 壓縮列表的構成
- 壓縮列表節點的構成
- 連鎖更新
- 壓縮列表 API
- 重點回顧
- 對象
- 對象的類型與編碼
- 字符串對象
- 列表對象
- 哈希對象
- 集合對象
- 有序集合對象
- 類型檢查與命令多態
- 內存回收
- 對象共享
- 對象的空轉時長
- 重點回顧
- 第二部分:單機數據庫的實現
- 數據庫
- 數據庫鍵空間
- 重點回顧
- RDB 持久化
- RDB 文件結構
- 重點回顧
- AOF 持久化
- AOF 持久化的實現
- 重點回顧
- 事件
- 文件事件
- 重點回顧
- 參考資料
- 客戶端
- 客戶端屬性
- 重點回顧
- 服務器
- 命令請求的執行過程
- 重點回顧
- 第三部分:多機數據庫的實現
- 復制
- 舊版復制功能的實現
- 重點回顧
- Sentinel
- 啟動并初始化 Sentinel
- 重點回顧
- 參考資料
- 集群
- 節點
- 重點回顧
- 第四部分:獨立功能的實現
- 發布與訂閱
- 頻道的訂閱與退訂
- 重點回顧
- 參考資料
- 事務
- 事務的實現
- 重點回顧
- Lua 腳本
- 創建并修改 Lua 環境
- 重點回顧
- 排序
- SORT <key> 命令的實現
- 重點回顧
- 二進制位數組
- GETBIT 命令的實現
- 重點回顧
- 慢查詢日志
- 慢查詢記錄的保存
- 慢查詢日志的閱覽和刪除
- 添加新日志
- 重點回顧
- 監視器
- 成為監視器
- 向監視器發送命令信息
- 重點回顧
- 源碼、相關資源和勘誤