Redis排序選項執行順序

1.選項的執行順序

 如果按照選項來劃分的話,一個SORT命令的執行過程可以分爲以下四步:

1)排序:

在這一步,命令會使用ALPHA、ASC或DESC、BY這幾個選項,對輸入鍵進行排序,並得到一個排序結果集。

2)限制排序結果集的長度:

在這一步,命令會使用LIMIT選項,對排序結果集的長度進行限制,只有LIMIT選項指定的那部分元素會被保留在排序結果集中。

3)獲取外部鍵:

在這一步,命令會使用GET選項,根據排序結果集中的元素,以及GET選項指定的模式,查找並獲取指定鍵的值,並用這些值來作爲新的排序結果集。

4)保存排序結果集:

在這一步,命令會使用STORE選項,將排序結果集保存到指定的鍵上面去。

5)向客戶端返回排序結果集:

在最後這一步,命令遍歷排序結果集,並以此向客戶端返回排序結果集中的元素。
在以上這些步驟中,後一個步驟必須在前一個步驟完成之後進行。
舉個例子,如果客戶端向服務器發送以下命令:
SORT <Key> ALPHA DESC BY <by-pattern> LIMIT <offset> <count> GET <get-pattern> STORE <store_key>
那麼命令首先會執行:
SORT <key> ALPHA DESC BY <by-pattern>
接着執行:
LIMIT <offset> <count>
然後執行:
GET <get-pattern>
之後執行:
STORE <store_key>
最後,命令遍歷排序結果集,將結果集中的元素一次返回給客戶端。

2.選項的擺放順序

另外要提醒的一點是,調用SORT命令時,除了GET選項之外,改變選項的擺放順序並不會影響SORT命令執行這些選項的順序。
例如,命令:
SORT <key> ALPHA DESC BY <by-pattern> LIMIT <offset> <count> GET <get-pattern> 
STORE <store_key>
和命令 SORT <key> LIMIT <offset> <count> BY <by-pattern> ALPHA GET <get-pattern> STORE 
<store_key> DESC
以及命令:SORT <key> STORE <store_key> DESC BY <by-pattern> GET <get-pattern> ALPHA 
LIMIT <offset> <count>
都產生完全相同的排序數據集。
不過如果命令包含了多個GET選項,那麼在調整選項的位置時,我們必須保證多個GET選項的擺放順序不變,這纔可以讓排序結果保持不變。
例如,命令:
SORT <key> GET <pattern-a> GET <pattern-b> STORE <store_key>
和命令:
        SORT <key> STORE <store_key> GET <pattern-a> GET <pattern-b>產生的排序結果集是完全一樣的,但如果將兩個GET選項的順序調整一下:
SORT <key> STORE <store_key> GET <pattern-b> GET <pattern-a>
那麼這個命令產生的排序結果集就會和前面兩個命令的排序結果集不同。因此在調整SORT命令各個選項的拜訪順序時,必須小心處理GET選項。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章