Sam*_*ack 1 c# caching redis azure-redis-cache
密钥:名字 值:samurai 有效期:6 小时
public static bool Add<T>(this IDatabase cache, string key, T value, TimeSpan? expiry = null)
{
dynamic response;
response = cache.StringSet(key, JsonConvert.SerializeObject(value, jsonSettings), expiry, flags: CommandFlags.DemandMaster);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
假设此时 TTL 为 10 分钟。IE。已过去 5 小时 50 分钟,10 分钟后密钥将被删除。但是如果有人对这个key进行get操作。到期时间应再次重置为 6 小时。
一种简单的方法是再次执行cache.StringSet。但恐怕这可能会降低重负载测试下的性能。还有其他选择吗?
要实现滑动过期,您可以KeyExpire[Async]在调用时发出 a StringGet。由于您不需要知道此结果,因此您可以使用它FireAndForget来避免任何延迟成本 - 即它不会算作第二次往返:
cache.KeyExpire(key, TimeSpan.FromHours(6), CommandFlags.FireAndForget); var val = cache.StringGet(key);
另一种方法是将其包装在 Lua via 中ScriptEvaluate并在那里执行这两个操作,但我认为这里没有必要 -KeyExpire和StringGet对应该没问题。