Redis是否提供Expiration和Expiration回调



我正在启动一个绿地项目。在其中,我们希望有一个QUEUE,它有过期。所以我添加了一个密钥,该项将在..过期。。说20分钟。

预计排队的队伍会很大。成千上万个不同到期时间的密钥中的10个。

我马上想到了可能使用ServiceStack.Redis,当然还有Redis:)

到目前为止,这有望在AppHarbor + RavenDb + RedisToGo上托管。Redis密钥将是RavenDb Id。(字符串-例如users/1或其他)

问题

  1. 我可以利用SS.RRedis将项目添加到到期的Redis队列中吗?(我假设,是的。例如typedClient.ExpiresAt(..))
  2. 我可以利用RedisToGo作为云托管的redis提供商,并使用SS.RRedis作为客户端吗?(再次假设是和是)
  3. 当一个项目过期时,我可以让它对某个URL进行REST get或POST吗?-这样我就可以"处理"到期了?(不知道)
  1. 在redis中,是过期,而不是列表/set/hash/等中的单个项。如果您有一个队列(我假设这是redis术语中的列表,在不同的末端推送/弹出),那么您的到期日适用于同一队列中的所有项目。对于允许每件物品过期的清单(等等)来说,并没有一个很好的比喻。坦率地说,最简单的方法可能是在有效载荷中包含逻辑到期,如果项目过期,则在弹出时丢弃它们

  2. 由于客户端可以通过所选端口访问服务器,因此无论特定的客户端和服务器/提供商如何,您都应该是正常的;但是,如果您拥有这些服务,那么验证这一点可能是微不足道的。

  3. Redis目前不包括任何到期触发功能,这已被2.8版本提出并(似乎)接受(见此处讨论);redis不会本身对url进行任何发布,但假设您可以在事件通道上侦听,并在您的代码中执行此操作

但是,它再次回到密钥与项目的到期问题上。

尝试为队列使用一个排序集(ZSET),并将时间戳作为SCORE。当您使用ZREVRANGEBYSCORE从队列中挑选作业时,您可以检查作业提交到队列中的时间戳,如果它太旧,您可以简单地忽略该作业。

相关内容

  • 没有找到相关文章

最新更新