问题描述
我正在将简单的缓存集成到应用程序中。我看到他们已经设置了将缓存添加到到期时间的方法,但是这种方法是强制性的到期时间。 有没有一种方法可以添加/设置缓存而不会过期?
解决方法
根据源代码,我发现有一个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);
}
}