azure redis-如何在每次访问密钥时延长过期时间?

tyky79it  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(425)

关键字:firstname值:武士expiry:6 hours

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

假设此时ttl为10min。也就是说,5小时50分钟过去了,10分钟后密钥将被删除。但如果有人对这把钥匙执行get操作。到期时间应重新设置为6小时。
一种简单的方法是再次执行cache.stringset。但我担心这会降低重负荷试验的性能。有别的选择吗?

50pmv0ei

50pmv0ei1#

要实现滑动过期,可以发出 KeyExpire[Async] 当你打电话的时候 StringGet . 既然你不需要知道结果,你可以用 FireAndForget 为避免任何延迟成本,即不计入第二次往返:

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

另一种方法是用lua-via包起来 ScriptEvaluate 在那里执行这两个操作,但我不认为这是必要的 KeyExpire 以及 StringGet 这双应该没问题。

相关问题