我正在启动一个绿地项目。在其中,我们希望有一个QUEUE,它有过期。所以我添加了一个密钥,该项将在..过期。。说20分钟。
预计排队的队伍会很大。成千上万个不同到期时间的密钥中的10个。
我马上想到了可能使用ServiceStack.Redis,当然还有Redis:)
到目前为止,这有望在AppHarbor + RavenDb + RedisToGo
上托管。Redis密钥将是RavenDb Id。(字符串-例如users/1
或其他)
问题
- 我可以利用SS.RRedis将项目添加到到期的Redis队列中吗?(我假设,是的。例如typedClient.ExpiresAt(..))
- 我可以利用RedisToGo作为云托管的redis提供商,并使用SS.RRedis作为客户端吗?(再次假设是和是)
- 当一个项目过期时,我可以让它对某个URL进行REST get或POST吗?-这样我就可以"处理"到期了?(不知道)
-
在redis中,是键过期,而不是列表/set/hash/等中的单个项。如果您有一个队列(我假设这是redis术语中的列表,在不同的末端推送/弹出),那么您的到期日适用于同一队列中的所有项目。对于允许每件物品过期的清单(等等)来说,并没有一个很好的比喻。坦率地说,最简单的方法可能是在有效载荷中包含逻辑到期,如果项目过期,则在弹出时丢弃它们
-
由于客户端可以通过所选端口访问服务器,因此无论特定的客户端和服务器/提供商如何,您都应该是正常的;但是,如果您拥有这些服务,那么验证这一点可能是微不足道的。
-
Redis目前不包括任何到期触发功能,但这已被2.8版本提出并(似乎)接受(见此处讨论);redis不会本身对url进行任何发布,但假设您可以在事件通道上侦听,并在您的代码中执行此操作
但是,它再次回到密钥与项目的到期问题上。
尝试为队列使用一个排序集(ZSET),并将时间戳作为SCORE。当您使用ZREVRANGEBYSCORE从队列中挑选作业时,您可以检查作业提交到队列中的时间戳,如果它太旧,您可以简单地忽略该作业。