【问题标题】:StackExchange.Redis key expiration by UTC dateStackExchange.Redis 密钥按 UTC 日期到期
【发布时间】:2015-05-14 10:41:58
【问题描述】:

我正在使用 StackExchange.Redis 并构建 Redis 客户端接口 RedisClientManager。 在我的界面中,我有 2 个密钥设置器(按时间跨度到期和日期时间到期):

按时间跨度:

public void Set(string key, object value, TimeSpan timeout)
{
    _cache.StringSet(key, Serialize(value), timeout);
}

按日期:

public void Set(string key, object value, DateTime expires)
{
    _cache.StringSet(key, Serialize(value));
    _cache.KeyExpire(key, expires);
}

用法:

按时间跨度:

RedisClientManager.Set(o.Key, o, new TimeSpan(0, 0, 5, 0));

按日期:

RedisClientManager.Set(o.Key, o, DateTime.UtcNow.AddMinutes(5));

如果我使用 Timespan(第一种方法)添加新密钥,则该对象在 Redis 缓存中,并且也会在 5 分钟后过期。如果我使用 Date(第二种方法)添加新键,则该对象不会添加到 Redis。

此问题仅发生在服务器上。在本地主机上一切正常。

也许 Redis 使用本地服务器时间作为密钥?

我该如何解决这个问题?使用StackExchange.Redis 设置密钥绝对过期的正确方法是什么?

【问题讨论】:

    标签: c# asp.net stackexchange.redis


    【解决方案1】:

    诸如...之类的东西怎么样?

    public void Set(string key, object value, DateTime expires)
    {
        var expiryTimeSpan = expires.Subtract(DateTime.UtcNow);
    
        _cache.StringSet(key, Serialize(value), expiryTimeSpan);
    
        //or Set(key, value, expiryTimeSpan);
    } 
    

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      相关资源
      最近更新 更多