Redis 首次将过期时间设置为已过时间返回True
在下面的测试中,我试图将密钥的过期时间设置为已经通过的时间(10秒前)。我需要它能够抛出异常,如果设置到期“失败”。我知道,我可以在设置缓存之前验证过期时间,但在某些情况下,我宁愿避免单独检查 从(一致的)行为我可以观察到,第一次它总是“成功”(返回true),第二次它的行为如预期的那样(返回false)Redis 首次将过期时间设置为已过时间返回True,redis,stackexchange.redis,Redis,Stackexchange.redis,在下面的测试中,我试图将密钥的过期时间设置为已经通过的时间(10秒前)。我需要它能够抛出异常,如果设置到期“失败”。我知道,我可以在设置缓存之前验证过期时间,但在某些情况下,我宁愿避免单独检查 从(一致的)行为我可以观察到,第一次它总是“成功”(返回true),第二次它的行为如预期的那样(返回false) 可能是我做错了什么吗?keyermire返回一个布尔值,指示是否可以设置到期时间。当您将到期时间设置为过去时,密钥将不再存在,因此当您尝试第二次设置它时:它将失败 因此,预期行为应为: fir
可能是我做错了什么吗?
keyermire
返回一个布尔值,指示是否可以设置到期时间。当您将到期时间设置为过去时,密钥将不再存在,因此当您尝试第二次设置它时:它将失败
因此,预期行为应为:
firstResult.ShouldBe(true);
secondResult.ShouldBe(false);
exists.ShouldBe(false);
ttl.ShouldBe(null);
对于一致运行,您可能还希望在每次运行之前删除密钥:
var cache = conn.GetDatabase();
cache.KeyDelete(key);
cache.HashSet(key, "full", "test", When.NotExists);
在顶端
有了这个:它似乎像我期望的那样工作。如果您看到的是不同的情况,请确切说明哪种结果是意外的。对于您描述的行为,它似乎如预期的那样起作用。我只是希望在已经过期的时间上设置过期将不会成功。我需要在代码中添加此检查。
var cache = conn.GetDatabase();
cache.KeyDelete(key);
cache.HashSet(key, "full", "test", When.NotExists);