如何使用EasyCache设置值而不会过期

问题描述

我正在将简单的缓存集成到应用程序中。我看到他们已经设置了将缓存添加到到期时间的方法,但是这种方法是强制性的到期时间。 有没有一种方法可以添加/设置缓存而不会过期?

解决方法

根据源代码,我发现有一个function Child({lookup}){ var [count,set_count]=React.useState(0) function diff(){ set_count(count+1) } lookup.diff=diff return <div>{count}</div> } function Parent(){ var [lookup,set_lookup]=React.useState({}) return <div> <Child {...{lookup}}/> <button onClick={_=>lookup.diff(1)}>up</button> </div> } ReactDOM.render(<Parent />,document.querySelector('#root') ); 属性可以检查缓存的过期时间,如果缓存超过了过期时间,它将删除它。

Source codes如下:

ExpirationScanFrequency

如果您希望这些缓存永不过期,则可以将此值设置为0,然后就不再检查过期时间。

更多详细信息,您可以参考以下代码:

注意:此设置仅适用于内存中缓存,而redis中没有此设置。

    private void StartScanForExpiredItems()
    {
        var utcNow = SystemClock.UtcNow;
        if (TimeSpan.FromSeconds(_options.ExpirationScanFrequency) < utcNow - _lastExpirationScan)
        {
            _lastExpirationScan = utcNow;
            Task.Factory.StartNew(state => ScanForExpiredItems((InMemoryCaching)state),this,CancellationToken.None,TaskCreationOptions.DenyChildAttach,TaskScheduler.Default);
        }
    }

    private void ScanForExpiredItems(InMemoryCaching cache)
    {
        var now = SystemClock.UtcNow;
        foreach (var entry in cache._memory.Values.Where(x => x.ExpiresAt < now))
        {
            cache.Remove(entry.Key);
        }
    }