使redis缓存每天在特定时间过期

Make redis cache expire at certain time everyday

我正在使用 node-redis。我有一个更新我的数据库的 cron 作业,我有一个缓存数据库响应的 redis 缓存。

我遇到的问题是我的 cron 作业每天凌晨 12 点运行,但是我只能将 redis 缓存设置为从现在起 x 秒后过期。有没有办法让 node-redis 缓存在每天凌晨 12 点准确过期。谢谢

代码:

const saveResult = await SET_CACHE_ASYNC('cacheData', response, 'EX', 15);

是的,你可以使用https://redis.io/commands/expireat command, if you use https://www.npmjs.com/package/redis包作为redis驱动,代码会像这样

const redis = require('redis')
const client = redis.createClient();
const when = (Date.now()+24*60*60*1000) / 1000;
client.expireat('cacheData', when, function(error){....};


``

最近我有一个应用程序遇到了同样的问题。我的工作是根据我的设置时间和过期时间之间的时间差创建一个新的时间跨度。这是我的代码:

private TimeSpan GetTimeSpanUntilNextDay(int hour)
        => new DateTime(DateTime.Now.Date.AddDays(1).Ticks).AddHours(hour) - DateTime.Now;

将堆栈交换库用于早上 6 点的绝对到期时间,代码如下所示:

public async Task<bool> SetEntranceAsync(string key, MYTYPE unserializedObject)
{
    var db = _multiplexer.GetDatabase();
    var jsonValue = JsonConvert.SerializeObject(unserializedObject);

    return await db.StringSetAsync(key, jsonValue, GetTimeSpanUntilNextDay(6));
}

我用的是 C#,但你应该可以用任何语言完成这个技巧。