C# StackExchange.Redis密钥按UTC日期到期

C# StackExchange.Redis密钥按UTC日期到期,c#,asp.net,stackexchange.redis,C#,Asp.net,Stackexchange.redis,我正在使用StackExchange.Redis并构建一个Redis客户端界面RedisClientManager。 在我的界面中,我有2个密钥设置器(按timespan过期和datetime过期): 按时间跨度: public void Set(string key, object value, TimeSpan timeout) { _cache.StringSet(key, Serialize(value), timeout); } 截止日期: public void Set(s

我正在使用StackExchange.Redis并构建一个Redis客户端界面
RedisClientManager
。 在我的界面中,我有2个密钥设置器(按timespan过期和datetime过期):

按时间跨度:

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, DateTime.UtcNow.AddMinutes(5));
用法:

按时间跨度:

RedisClientManager.Set(o.Key, o, new TimeSpan(0, 0, 5, 0));
截止日期:

public void Set(string key, object value, DateTime expires)
{
    _cache.StringSet(key, Serialize(value));
    _cache.KeyExpire(key, expires);
}
RedisClientManager.Set(o.Key, o, DateTime.UtcNow.AddMinutes(5));
如果我使用Timespan(第一种方法)添加新密钥,那么对象在Redis缓存中,并且在5分钟后过期。如果我使用Date(第二种方法)添加新键,则对象不会添加到Redis

此问题仅在服务器上发生。在localhost上,一切正常

也许Redis使用本地服务器时间来获取密钥


如何解决此问题?使用StackExchange.Redis将绝对过期设置为key的正确方法是什么?

类似于

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