SSCAN vs SMEMBERS资源用于大型集合

Luc*_* S. 3 set redis

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

通过SET的所有条目,哪种方式最有效(在资源方面)?使用SSCAN或进行SMEMEBERS调用.

Pas*_*rer 5

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

在此操作期间,您的实例不会响应任何其他请求.

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

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