Redis是否提供过期和过期回调?

时间:2012-12-17 11:43:32

标签: .net redis queue servicestack redistogo

我正在开始一个绿色的田野项目。在其中,我们希望有一个已经到期的 QUEUE 。所以我添加了一个密钥,该项目将在...中说... 20分钟。

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

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

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

问题

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

2 个答案:

答案 0 :(得分:3)

  1. 在redis中,具有到期日期,而不是列表/集合/散列/等中的单个项目。如果您有一个队列(我假设这是redis术语中的列表,在不同端推送/弹出),那么您的到期时间适用于同一队列中的所有项目。对于允许每个项目到期的列表(等),确实没有一个好的比喻。坦率地说,最简单的事情可能是在有效载荷中包含逻辑到期,并且如果它们已经过期则只丢弃它们

  2. 由于客户端可以通过所选端口访问服务器,因此无论特定客户端和服务器/提供商是谁,都应该没问题。但如果你有这些服务,那么大概就可以验证这一点。

  3. 当前时间的Redis不包含任何到期触发功能,已经提出并且(似乎)已接受2.8版本(see discussion here); redis不会本身对网址发布任何帖子,但假设您只能在活动频道上收听,并在您的代码

  4. 中执行此操作

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

答案 1 :(得分:0)

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