redis - 将所有排序集分数归零

标签 redis

我正在使用 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/

相关文章:

redis - 如何使用 Structuremap 在自定义命名空间中将 Redis 设置为 ServiceStack Web 应用程序上的缓存和 MQ

amazon-web-services - Dynamodb 与 Redis

ruby-on-rails - 为什么 Travis 在部署到 Heroku 时无法连接使用 Redis cache_store?

redis - 使用 Redis Sorted Sets 作为队列

redis - 使用 Redis 建模一对多关系

Ubuntu 16.04 systemd redis 与 ulimit 的问题

redis - 如何从多个 RDB 文件中恢复 Redis

c# - StackExchange.Redis.RedisTimeoutException : The timeout was reached before the message could be written to the output buffer, 并且未发送

multithreading - Redis 如何为 IOCP 找到最优值

java - Redis hash写入速度非常慢