如何解决LazyCache:如何防止将特定项目添加到缓存
如何防止将特定项目添加到缓存。就我而言,我正在考虑防止将null返回值添加到缓存中。这是我目前正在做的事情:
Func<long?> internalGetRecordUri =() =>
{
//it can return null here
};
long? output;
lock (_lock)
{
output = _cache.GetorAdd(
"GetRecordUri" + applicationId,internalGetRecordUri,new TimeSpan(1,0));
if (output == null)
{
_cache.Remove("GetRecordUri" + applicationId);
}
}
我确信有更好的方法,因为这种方式实现锁首先会破坏使用LazyCache的目的。
解决方法
您可以使用 MemoryCacheEntryOptions 回调生成缓存项并将到期日期设置为过去(如果为空)来实现此目的:
output = _cache.GetOrAdd(
"GetRecordUri" + 123,entry => {
var record = internalGetRecordUri();
if(record == null)
// expire immediately
entry.AbsoluteExpirationRelativeToNow = new TimeSpan(-1,0);
else
entry.AbsoluteExpirationRelativeToNow = new TimeSpan(1,0);
return record;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。