3

我正在开始一个绿地项目。在其中,我们希望有一个有期限的队列。所以我添加了一个密钥,该项目在 .. 说 .. 20 分钟后过期。

队列预计会很大。成千上万个具有不同到期时间的密钥。

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

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

问题

  1. 我可以利用 SS.Redis 将项目添加到过期的 redis 队列吗?(我假设是的。例如 typedClient.ExpiresAt(..))
  2. 我可以利用 RedisToGo 作为云托管的 redis 提供商并使用 SS.Redis 作为客户端吗?(再次,假设是和是)
  3. 当一个项目过期时,我可以让它做一个 REST GET 或 POST 到某个 URL 吗?- 所以我可以“处理”到期?(不知道)。
4

2 回答 2

3
  1. 在 redis 中,过期的是key,而不是 list/set/hash/etc 中的单个项目。如果您有一个队列(我假设这是 redis 术语中的列表,在不同的端推送/弹出),那么您的到期适用于同一队列中的所有项目。对于允许每个项目到期的列表(等),没有一个很好的比喻。坦率地说,最简单的事情可能是在有效负载中包含逻辑到期,如果它们过期,则在弹出它们时丢弃它们

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

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

但同样,它又回到了密钥与物品的到期问题。

于 2012-12-17T12:05:43.673 回答
0

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

于 2013-10-02T00:57:32.577 回答