【问题标题】:Azure Redis - how to extend the expiration time every time key is accessed?Azure Redis - 每次访问密钥时如何延长到期时间?
【发布时间】:2020-10-13 11:18:45
【问题描述】:

键:名字 价值:武士 有效期: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;
        }

假设此时 TTL 为 10 分钟。 IE。 5小时50分钟过去了,10分钟后密钥将被删除。但是如果有人对这个键执行 get 操作。到期应再次重置为 6 小时。

一个简单的方法是再次执行cache.StringSet。但我担心这可能会降低重负载测试下的性能。有其他选择吗?

【问题讨论】:

  • 顺便说一句,你不需要告诉它 StringSet 需要被路由到主节点——它知道

标签: c# caching redis azure-redis-cache


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-12-02
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2021-05-10
    • 2015-01-11
    • 2021-01-14
    相关资源
    最近更新 更多