数据库
首页 > 数据库> > c# – 按UTC日期的StackExchange.Redis密钥exiperation

c# – 按UTC日期的StackExchange.Redis密钥exiperation

作者:互联网

我使用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.
此问题仅在服务器上发生.在localhost上一切正常.
可能是redis使用本地服务器时间键吗?
我该如何解决这个问题?

使用StackExchange.Redis为密钥设置绝对到期的正确方法是什么?

解决方法:

怎么样……

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

标签:c,asp-net,stackexchange-redis
来源: https://codeday.me/bug/20190528/1170513.html