测试 Redis 键过期

9

我想知道是否有巧妙的方法在 Redis 键过期后测试其行为。我正在为我的应用程序构建一个小型的 Redis 缓存,并希望测试当 Redis 键过期时会发生什么。

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

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

是否有人有好的测试方法?

2个回答

10

有时候最简单的答案却是最难捉摸的,这真是令人惊奇。 - ajorgensen
您的意思是将过期时间设置为零吗? - liori
你如何立即使密钥过期?我尝试使用SETEX将其设置为零和nil,但两者都会抛出错误。 - jconley
2
在常规情况下,对我来说负值的 EXPIRE 可以立即使键过期。因此,请使用 EXPIRE 键-1 :) - Ravbaker

1
在测试环境中修复此问题的正确方法是模拟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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接