SSCAN vs SMEMBERS资源用于大型集合

时间:2016-10-12 18:03:47

标签: redis set

我有一个大的redis SET(超过6M条目),我需要遍历所有条目并对每个条目进行一些其他redis操作(主要使用基于原始的密钥在redis排序集中调用ZCARD条目)。

哪个是最有效的(在资源方面)通过SET的所有条目的方式?使用SSCAN或进行SMEMEBERS呼叫。

2 个答案:

答案 0 :(得分:5)

SMEMBERS在一次操作中返回SET中的所有成员。此操作的持续时间与SET中的项目数成正比(时间复杂度:O(N))。

在此操作过程中,您的实例不会响应任何其他请求。

SSCAN允许您遍历SET中的所有项目。时间复杂度是固定的(O(1)),具体取决于您在每次调用时获得的项目数(此数字由COUNT参数定义)。 SSCAN的总成本可能与SMEMBERS的成本相同,或者更高,因为您必须拨打多个电话。但是它允许在两次调用之间处理其他请求,因此您的Redis实例看起来不会响应。

所有这些都是纯粹的理论。要获得明确的建议,你应该进行测试和测量,这应该是相当容易的。

答案 1 :(得分:3)

SMEMBERS必须迭代整个集合并立即生成整个密钥列表,而SSCAN每次调用它时都会返回一小部分密钥。虽然他们都做了相同数量的工作,但SSCAN以较小的块进行工作,这意味着,对于大多数用例,它对服务器正在执行的所有其他操作的性能影响较小。