Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 首次将过期时间设置为已过时间返回True_Redis_Stackexchange.redis - Fatal编程技术网

Redis 首次将过期时间设置为已过时间返回True

Redis 首次将过期时间设置为已过时间返回True,redis,stackexchange.redis,Redis,Stackexchange.redis,在下面的测试中,我试图将密钥的过期时间设置为已经通过的时间(10秒前)。我需要它能够抛出异常,如果设置到期“失败”。我知道,我可以在设置缓存之前验证过期时间,但在某些情况下,我宁愿避免单独检查 从(一致的)行为我可以观察到,第一次它总是“成功”(返回true),第二次它的行为如预期的那样(返回false) 可能是我做错了什么吗?keyermire返回一个布尔值,指示是否可以设置到期时间。当您将到期时间设置为过去时,密钥将不再存在,因此当您尝试第二次设置它时:它将失败 因此,预期行为应为: fir

在下面的测试中,我试图将密钥的过期时间设置为已经通过的时间(10秒前)。我需要它能够抛出异常,如果设置到期“失败”。我知道,我可以在设置缓存之前验证过期时间,但在某些情况下,我宁愿避免单独检查

从(一致的)行为我可以观察到,第一次它总是“成功”(返回true),第二次它的行为如预期的那样(返回false)


可能是我做错了什么吗?

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);