C# LazyCache:如何防止将特定项添加到缓存中
如何防止将特定项添加到缓存。在我的例子中,我考虑防止将null返回添加到缓存中。这就是我目前正在做的:C# LazyCache:如何防止将特定项添加到缓存中,c#,memorycache,lazycache,C#,Memorycache,Lazycache,如何防止将特定项添加到缓存。在我的例子中,我考虑防止将null返回添加到缓存中。这就是我目前正在做的: Func<long?> internalGetRecordUri =() => { //it can return null here }; long? output; lock (_lock)
Func<long?> internalGetRecordUri =() =>
{
//it can return null here
};
long? output;
lock (_lock)
{
output = _cache.GetOrAdd(
"GetRecordUri" + applicationId,
internalGetRecordUri, new TimeSpan(1, 0, 0, 0));
if (output == null)
{
_cache.Remove("GetRecordUri" + applicationId);
}
}
Func internalGetRecordUri=()=>
{
//它可以在这里返回null
};
长的产出;
锁
{
输出=_cache.GetOrAdd(
“GetRecordUri”+应用程序ID,
internalGetRecordUri,新的时间跨度(1,0,0,0));
if(输出==null)
{
_cache.Remove(“GetRecordUri”+applicationId);
}
}
我相信有更好的方法,因为这种方式实现锁首先会破坏使用LazyCache的目的。您可以使用MemoryCacheEntryOptions回调生成缓存项,并将到期日期设置为过去(如果为null):
output=\u cache.GetOrAdd(
“GetRecordUri”+123,条目=>{
var record=internalGetRecordUri();
if(记录==null)
//立即到期
entry.AbsoluteExpirationRelativeToNow=新的时间跨度(-1,0,0,0);
其他的
entry.AbsoluteExpirationRelativeToNow=新的时间跨度(1,0,0,0);
返回记录;
});