2016-10-12 42 views
0

我有一個很大的redis SET(超過6M條目),我需要瀏覽所有條目,並對每個條目做一些其他的redis操作(主要是在redis中調用ZCARD Sorted使用基於原始條目的密鑰進行設置)。SSCAN vs SMEMBERS大型集資源使用情況

哪個是最有效的(在資源方面)通過SET的所有條目的方式?使用SSCAN或進行SMEMEBERS呼叫。

回答

1

SMEMBERS必須遍歷整個集合並一次生成整個鍵的列表,而每次調用它時,SSCAN都會返回一小部分鍵。雖然他們的工作量相當,但SSCAN以更小的塊來完成這項工作,這意味着,對於大多數使用情況來說,它對服務器所做其他事情的性能影響較小。

0

SMEMBERS在一次操作中返回SET中的所有成員。此操作的持續時間與SET中的項目數量(時間複雜度:O(N))成正比。

在此操作過程中,您的實例將不會響應任何其他請求。

SSCAN允許您迭代SET中的所有項目。固定的時間複雜度(O(1)),取決於您在每次通話時獲得的項目數量(此數字由COUNT參數定義)。 SSCAN的總成本可能與SMEMBERS的總成本相同,或者可能更大,因爲您必須進行多次呼叫。但它會允許在兩個調用之間處理其他請求,所以你的Redis實例不會看起來沒有響應。

所有這些都是純理論。爲了得到明確的建議,你應該測試和測量,這應該很容易做到。

相關問題