Cache BestForTags briefly for better performance when processing releases.
This commit is contained in:
parent
393996fe88
commit
c34eec160f
src/NzbDrone.Core/Profiles/Delay
|
@ -1,5 +1,7 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using NzbDrone.Common.Cache;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Profiles.Delay
|
namespace NzbDrone.Core.Profiles.Delay
|
||||||
|
@ -18,20 +20,26 @@ namespace NzbDrone.Core.Profiles.Delay
|
||||||
public class DelayProfileService : IDelayProfileService
|
public class DelayProfileService : IDelayProfileService
|
||||||
{
|
{
|
||||||
private readonly IDelayProfileRepository _repo;
|
private readonly IDelayProfileRepository _repo;
|
||||||
|
private readonly ICached<DelayProfile> _bestForTagsCache;
|
||||||
|
|
||||||
public DelayProfileService(IDelayProfileRepository repo)
|
public DelayProfileService(IDelayProfileRepository repo, ICacheManager cacheManager)
|
||||||
{
|
{
|
||||||
_repo = repo;
|
_repo = repo;
|
||||||
|
_bestForTagsCache = cacheManager.GetCache<DelayProfile>(GetType(), "best");
|
||||||
}
|
}
|
||||||
|
|
||||||
public DelayProfile Add(DelayProfile profile)
|
public DelayProfile Add(DelayProfile profile)
|
||||||
{
|
{
|
||||||
return _repo.Insert(profile);
|
var result = _repo.Insert(profile);
|
||||||
|
_bestForTagsCache.Clear();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DelayProfile Update(DelayProfile profile)
|
public DelayProfile Update(DelayProfile profile)
|
||||||
{
|
{
|
||||||
return _repo.Update(profile);
|
var result = _repo.Update(profile);
|
||||||
|
_bestForTagsCache.Clear();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
|
@ -48,6 +56,7 @@ namespace NzbDrone.Core.Profiles.Delay
|
||||||
}
|
}
|
||||||
|
|
||||||
_repo.UpdateMany(all);
|
_repo.UpdateMany(all);
|
||||||
|
_bestForTagsCache.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DelayProfile> All()
|
public List<DelayProfile> All()
|
||||||
|
@ -67,7 +76,14 @@ namespace NzbDrone.Core.Profiles.Delay
|
||||||
|
|
||||||
public DelayProfile BestForTags(HashSet<int> tagIds)
|
public DelayProfile BestForTags(HashSet<int> tagIds)
|
||||||
{
|
{
|
||||||
return _repo.All().Where(r => r.Tags.Intersect(tagIds).Any() || r.Tags.Empty())
|
var key = "-" + tagIds.Select(v => v.ToString()).Join(",");
|
||||||
|
return _bestForTagsCache.Get(key, () => FetchBestForTags(tagIds), TimeSpan.FromSeconds(30));
|
||||||
|
}
|
||||||
|
|
||||||
|
private DelayProfile FetchBestForTags(HashSet<int> tagIds)
|
||||||
|
{
|
||||||
|
return _repo.All()
|
||||||
|
.Where(r => r.Tags.Intersect(tagIds).Any() || r.Tags.Empty())
|
||||||
.OrderBy(d => d.Order).First();
|
.OrderBy(d => d.Order).First();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue