在下面的测试中,我试图将密钥的到期时间设置为已经过去的时间(10 秒前)。如果设置过期“失败”,我需要它能够抛出异常。我了解,我可以在设置缓存之前验证过期时间,但在某些情况下,我可能更愿意避免单独检查。
从(一致的)行为我可以观察到,第一次它总是“成功”(返回 true),第二次它的行为符合预期(返回 false)。
[Test]
public void SetExpirationToPassed()
{
var key = "testKey";
using (var conn = CreateConnection())
{
// Given
var cache = conn.GetDatabase();
cache.HashSet(key, "full", "test", When.NotExists, CommandFlags.PreferMaster);
Thread.Sleep(10 * 1000);
// When
var expiresOn = DateTime.UtcNow.AddSeconds(-10);
var firstResult = cache.KeyExpire(key, expiresOn, CommandFlags.PreferMaster);
var secondResult = cache.KeyExpire(key, expiresOn, CommandFlags.PreferMaster);
var exists = cache.KeyExists(key);
var ttl = cache.KeyTimeToLive(key);
// Then
secondResult.ShouldBe(false);
firstResult.ShouldBe(false);
exists.ShouldBe(false);
ttl.ShouldBe(null);
}
}
private ConnectionMultiplexer CreateConnection()
{
return ConnectionMultiplexer connection =ConnectionMultiplexer.Connect(...);
}
可能是我做错了什么?