gpt4 book ai didi

python - Redis模式: how would you cache free/occupied ressource with expiration?

转载 作者:可可西里 更新时间:2023-11-01 11:14:19 27 4
gpt4 key购买 nike

这是我这周正在处理的问题,但我有点碰壁了。

假设我有 100 个资源可用于完成一些快速任务。

我想为客户做的,尽可能快:

  1. 获取第一个可用资源
  2. 将其标记为已占用
  3. 使用它
  4. 将其标记为免费。对于这种东西,我觉得使用sorted set是最好的。

但是因为我的客户端不是很安全并且有时会在它运行的代码中间失败我真的想在我将资源标记为已占用时设置过期时间这样资源就不能永远处于占用状态。

这听起来像是一个非常普遍的问题,我敢肯定有很多关于如何使用 Redis 修复它的文献,但我找不到任何文献。

我发现了很多“维护全局排行榜”这类问题的模式和示例,但这些示例中没有一个涉及 key 过期。

我目前有这样的解决方案:

for ressource in ressources:
if GET <ressource> == 0:
SET <ressource> 1, EX=10
use_ressource(<ressource>)
SET <ressource> 0, EX=10
else:
continue

问题是,一旦我使用了大量资源,这可能需要大量操作才能找到第一个空闲资源,尽管 Redis 非常快,但此代码段无法很好地扩展。

最佳答案

在我的脑海中:

  • 维护一组免费资源
  • 维护一组已用资源
  • 设置 keyspace listenerexpired 事件通知上

当需要资源时,随机选择一个带有SRANDMEMBER的资源并将其移动到使用 SMOVE 设置的正在使用的资源中.在同一个事务中,设置一个简单的过期键,带有良好的前缀、资源的名称/类型和所需的 TTL SETEX .

设置一个 redis keyspace 通知消费者(仍然是新的,但查看他们的最新技术 Redis Gears 以获得 super 简化的版本!)监听您分配的前缀的 expired 事件。当这些事件之一发生时,运行上面相同的 SMOVE 逻辑,但只是将资源移回空闲资源集中。

关于实际资源本身,当它们完成时,让它们自行过期它们的跟踪 key ,通知消费者可以处理状态刷新:)

这应该可以为您提供所需的灵 active !


这里有类似的问题,一些答案可能有用:How to "EXPIRE" the "HSET" child key in redis?

关于python - Redis模式: how would you cache free/occupied ressource with expiration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57074519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com