【问题标题】:Testing redis key expiration测试redis key过期
【发布时间】:2013-01-10 13:21:14
【问题描述】:

我想知道是否有人有聪明的方法来测试 redis 密钥过期后的行为。我实际上是在为我的应用程序构建一个小型 redis 支持的缓存,并想测试在 redis 键设置为过期后会发生什么。

我使用 rspec 作为我的测试框架。我尝试在测试期间使用 Timecop 更改时间,但意识到它只会影响测试框架的工作,而不影响外部 redis 服务器。

我可以将 TTL 设置为 1,然后使用 sleep(1),但我不想在我的测试中引入 sleep。

有没有人有很好的测试方法?

【问题讨论】:

    标签: ruby-on-rails rspec redis


    【解决方案1】:

    为什么不使用http://redis.io/commands/expire 立即使密钥过期?

    【讨论】:

    • 令人惊讶的是,最简单的答案有时却是最难以捉摸的。
    • 你的意思是把过期时间设置为零?
    • 如何使密钥立即过期?我尝试使用 SETEX 将其设置为零和零,但都抛出错误
    • 定期 EXPIRE 负值对我有用,并立即过期。所以使用 EXPIRE 键 -1 :)
    【解决方案2】:

    为测试环境解决此问题的正确方法是模拟出 redis 客户端并让它返回预期值。我有信心 redis 会做正确的事情并正确实施,因此模拟这种交互可能比让测试实际命中 redis 更好。

    redis_client.should_receive(:ttl).with(key).then_return(-1)
    

    或者只是模拟对密钥的请求

    redis_client.should_receive(:get).with(key).then_return(nil)
    

    使用较新的 RSpecs 版本,

    expect(redis_client).to receive(:get).with(key).and_return(value)
    

    【讨论】:

      猜你喜欢
      • 2014-12-11
      • 2017-05-04
      • 2021-10-18
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 2015-06-09
      相关资源
      最近更新 更多