如何使用redis缓存实现自动刷新

oxf4rvwz  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(555)

memorycache有一个set方法,允许我指定在通过 CacheItemPolicy 参数。
这可以用于定期自动刷新缓存,而无需使用hangfire或其他任务运行程序。
如何使用stackexchange.redis在.net中实现这一点?
我在redis命令参考中找不到任何适合我的目的和所有实现的方法 ObjectCache 我在网上找到的 NotSupportedException 在它们的实现中:
https://github.com/justinfinch/redis-object-cache/blob/master/src/redisobjectcache/rediscache.cshttps://www.leadtools.com/help/sdk/v20/dh/to/azure-redis-cache-example.htmlhttpshttp://github.com/azure/aspnet-redis-providers/pull/72/commits/2930ede272fe09abf930208dfe935c602c1bb510

new9mtju

new9mtju1#

缓存中的典型模式是调用缓存的数据,当找不到时,加载它。

public T Get<T>(string key)
{
    T ret = GetFromRedis<T>(key); // I am not going to go into implementation of GetFromRedis for purpose of this question
    if (ret == null)
    {
        // in the multi-server situation, this lock can be 
        // implemented as UPDATE record lock on DB transaction***
        lock(_loadLock) 
        {
            ret = GetFromRedis<T>(key);
            if (ret == null)
            {
                ret = DataProvider.Load<T>();
                SetInRedis(key, ret);   
            }
        }
    }
    return ret; 
}

***我不会把太多的重点放在锁上!!多个!!服务器。是的,在第一次加载时,您可能会加载两次或更多数据,但是您的redis SET 可以使用 When.NotExists . 这样,当多个线程尝试这样做时,实际缓存将不会被替换。所以,这就是按需缓存和常量缓存。例如,在大型应用程序中,有些部件没有使用。为什么要填充缓存?然后,用户开始点击部件,瞧!

ogq8wdun

ogq8wdun2#

redis中没有这样的东西。
但是,redis确实支持keyspace通知,它提供了一种注册 Expired 事件。您可以注册一个客户端,该客户端将对此类事件作出React并刷新缓存。
另一种选择是使用redisgears并在上注册 expired --> register(eventTypes=['exired']) 事件,以便每次触发过期事件时,嵌入在redis中运行的函数都将刷新数据。

相关问题