目前我的程序不断重复查询相同的存储库。我目前正在使用UnitOfWork模式查询我的表格。
例如经常运行的查询
var peopleCollection = UnitOfWork.PersonRepository.Get(x => x.Active);
为了增强我的软件以减少重复性任务,我可以问一下,如果我有一个UnitOfWork模式,我应采取什么样的方法来缓存。我知道我可以将集合保存到字典中,并在我想要使用它时调用该字典。但这种方法的主要问题是,如果另一个用户要保存一个新人,我会有一个过时的人群。
答案 0 :(得分:0)
简短的回答是,每种情况都需要稍微不同的解决方案。
通常,最好的解决方案是使用Decorator模式来缓存重复的数据调用,并确保缓存使旧的数据失效,并使用适当的过期策略。
例如,假设您的用户不会感到拥有最长60秒的Person数据。在这种情况下,您可以将缓存过期期间设置为60秒。
这是一个通用缓存项的示例,非常适合存储在字典中:
public class CachedItem<T>
{
private readonly T _item;
private readonly DateTime _expirationTime;
public CachedItem(T obj, TimeSpan cacheDuration)
{
_item = obj;
_expirationTime = DateTime.Now.Add(cacheDuration);
}
public bool IsExpired { get { return DateTime.Now > _expirationTime; } }
public T Item
{
get
{
if (IsExpired)
throw new InvalidOperationException("Expired Cached Items cannot be retrieved.");
return _item;
}
}
}