我正在使用 Redis 存储一组校验和。我正在递增解析大型数据集时看到的每个成员,并使用分数来确定我多次“访问”的成员。但是,由于此操作是定期进行的,因此我想之后将所有成员的分数重置为零。有什么好的方法吗?
我知道 ZRANGEBYSCORE,也许可以将它返回的内容“复制”到一个新 key 中,但是对于大量数据,这是不太理想的。我也可以在流程开始时取最低分数,然后 ZREMRANGEBYSCORE 所有等于或低于该分数的分数,但这似乎也不可取,因为我的分数会无限期地继续上升。
最佳答案
你可以使用 ZUNIONSTORE使用 WEIGHTS 值为零复制集合并将所有分数归零,例如
ZUNIONSTORE myZeroedSet 1 myInitialSet WEIGHTS 0
RENAME myZeroedSet myInitialSet
零权重将导致 myInitialSet 中的所有分数乘以零,从而重置它们。重命名将成功,而无需先明确删除 myInitialSet。
这样做的好处是它发生在 Redis 内部(您不必通过网络来回传输整个集合),而且速度很快。
关于redis - 将所有排序集分数归零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079278/