我正在开始一个绿色的田野项目。在其中,我们希望有一个已经到期的 QUEUE 。所以我添加了一个密钥,该项目将在...中说... 20分钟。
队列预计会非常大。成千上万的密钥有10个不同的到期时间。
直接我想到可能使用ServiceStack.Redis,当然还有Redis:)
到目前为止,希望将在AppHarbor + RavenDb + RedisToGo
上托管。 Redis Key将是RavenDb Id。 (字符串 - 例如。users/1
或其他)
答案 0 :(得分:3)
在redis中,键具有到期日期,而不是列表/集合/散列/等中的单个项目。如果您有一个队列(我假设这是redis术语中的列表,在不同端推送/弹出),那么您的到期时间适用于同一队列中的所有项目。对于允许每个项目到期的列表(等),确实没有一个好的比喻。坦率地说,最简单的事情可能是在有效载荷中包含逻辑到期,并且如果它们已经过期则只丢弃它们
由于客户端可以通过所选端口访问服务器,因此无论特定客户端和服务器/提供商是谁,都应该没问题。但如果你有这些服务,那么大概就可以验证这一点。
当前时间的Redis不包含任何到期触发功能,但已经提出并且(似乎)已接受2.8版本(see discussion here); redis不会本身对网址发布任何帖子,但假设您只能在活动频道上收听,并在您的代码
但同样,它又回到了密钥与项目到期的问题。
答案 1 :(得分:0)
尝试为队列使用排序集(ZSET) - 使用时间戳作为SCORE。当您使用ZREVRANGEBYSCORE从队列中选择作业时,您可以检查作业提交到队列的时间戳,如果它太旧,您可以忽略该作业。