Azure Redis - 如何延长每次访问密钥时的过期时间?

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。但恐怕这可能会降低重负载测试下的性能。还有其他选择吗?

Mar*_*ell 6

要实现滑动过期,您可以KeyExpire[Async]在调用时发出 a StringGet。由于您不需要知道此结果,因此您可以使用它FireAndForget来避免任何延迟成本 - 即它不会算作第二次往返:

cache.KeyExpire(key, TimeSpan.FromHours(6), CommandFlags.FireAndForget);
var val = cache.StringGet(key);

另一种方法是将其包装在 Lua via 中ScriptEvaluate并在那里执行这两个操作,但我认为这里没有必要 -KeyExpireStringGet对应该没问题。