Redis 性能比较:使用 TTL 与 allkeys-lru 策略
Redis performance comparison: using TTL vs allkeys-lru policy
在 Redis 中,使用 allkeys-lru
删除键,无论它是否是过期设置键。
使用 TTL
,为密钥设置过期时间,占用内存。
引用自Redis.io:
It is also worth noting that setting an expire to a key costs memory,
so using a policy like allkeys-lru is more memory efficient since
there is no need to set an expire for the key to be evicted under
memory pressure.
- 整体上不是真的更有效率在钥匙上放一个
TTL
然后让allkeys-lru
政策处理了吗?
- 在这种情况下没有任何权衡吗?例如,
allkeys-lru
是否会阻止写操作 直到它完成到期?如果这个过期要持续很长时间,那会让我使用 TTL。
我很乐意讨论这个问题。感谢大家的参与!
allkeys-lru 由 Redis 分配的内存限制触发。这是避免 Redis 完全崩溃的一项安全功能。
如果你只依赖 allkeys-lru 来清理你的数据,那么你的 Redis 将 运行 变慢,因为任何操作都必须应用于更大的数据库。并且您的 Redis 数据库将始终处于最大大小。
此外,这也会让您在业务增长过程中更难监控您的资源。
在您的值上使用 TTL 更像是一个基于您的用例的技术决定。它使您可以更好地控制不再需要的事件。
TTL 使用更多内存,因为它必须为每条记录存储 TTL 值,这是有道理的。
对于 Redis-Streams,您可以使用 MAXLEN 属性 来避免流过大,特别是当您不需要旧数据时。此 属性 是针对每个流的,因此它不会增加 Redis 内存那么多。
Redis-streams 是按流(按键)而不是按记录过期的。因此,如果您不断收到新数据,则不可能基于 TTL/record 使来自 Streams 的旧记录过期。
主要结论:尽可能使用 TTL 和 MAXLEN 来更快地清理不必要的数据,这样 Redis 就不需要一次完成所有操作,您将可以更好地控制数据和资源。
在 Redis 中,使用 allkeys-lru
删除键,无论它是否是过期设置键。
使用 TTL
,为密钥设置过期时间,占用内存。
引用自Redis.io:
It is also worth noting that setting an expire to a key costs memory, so using a policy like allkeys-lru is more memory efficient since there is no need to set an expire for the key to be evicted under memory pressure.
- 整体上不是真的更有效率在钥匙上放一个
TTL
然后让allkeys-lru
政策处理了吗? - 在这种情况下没有任何权衡吗?例如,
allkeys-lru
是否会阻止写操作 直到它完成到期?如果这个过期要持续很长时间,那会让我使用 TTL。
我很乐意讨论这个问题。感谢大家的参与!
allkeys-lru 由 Redis 分配的内存限制触发。这是避免 Redis 完全崩溃的一项安全功能。 如果你只依赖 allkeys-lru 来清理你的数据,那么你的 Redis 将 运行 变慢,因为任何操作都必须应用于更大的数据库。并且您的 Redis 数据库将始终处于最大大小。
此外,这也会让您在业务增长过程中更难监控您的资源。
在您的值上使用 TTL 更像是一个基于您的用例的技术决定。它使您可以更好地控制不再需要的事件。 TTL 使用更多内存,因为它必须为每条记录存储 TTL 值,这是有道理的。
对于 Redis-Streams,您可以使用 MAXLEN 属性 来避免流过大,特别是当您不需要旧数据时。此 属性 是针对每个流的,因此它不会增加 Redis 内存那么多。 Redis-streams 是按流(按键)而不是按记录过期的。因此,如果您不断收到新数据,则不可能基于 TTL/record 使来自 Streams 的旧记录过期。
主要结论:尽可能使用 TTL 和 MAXLEN 来更快地清理不必要的数据,这样 Redis 就不需要一次完成所有操作,您将可以更好地控制数据和资源。