Completes: U4-3937 Ensure media is indexed across all servers in LB environment with Distributed Cache calls

for members
This commit is contained in:
Shannon
2014-03-06 18:25:38 +11:00
parent e7fb6e5beb
commit 72c5853fb1
6 changed files with 117 additions and 66 deletions

View File

@@ -596,22 +596,22 @@ namespace Umbraco.Web.Cache
#endregion
#region Media event handlers
static void MediaServiceTrashing(IMediaService sender, Core.Events.MoveEventArgs<IMedia> e)
static void MediaServiceTrashing(IMediaService sender, MoveEventArgs<IMedia> e)
{
DistributedCache.Instance.RemoveMediaCache(false, e.Entity);
}
static void MediaServiceMoving(IMediaService sender, Core.Events.MoveEventArgs<IMedia> e)
static void MediaServiceMoving(IMediaService sender, MoveEventArgs<IMedia> e)
{
DistributedCache.Instance.RefreshMediaCache(e.Entity);
}
static void MediaServiceDeleting(IMediaService sender, Core.Events.DeleteEventArgs<IMedia> e)
static void MediaServiceDeleting(IMediaService sender, DeleteEventArgs<IMedia> e)
{
DistributedCache.Instance.RemoveMediaCache(true, e.DeletedEntities.ToArray());
}
static void MediaServiceSaved(IMediaService sender, Core.Events.SaveEventArgs<IMedia> e)
static void MediaServiceSaved(IMediaService sender, SaveEventArgs<IMedia> e)
{
DistributedCache.Instance.RefreshMediaCache(e.SavedEntities.ToArray());
}
@@ -619,27 +619,21 @@ namespace Umbraco.Web.Cache
#region Member event handlers
static void MemberServiceDeleted(IMemberService sender, Core.Events.DeleteEventArgs<IMember> e)
static void MemberServiceDeleted(IMemberService sender, DeleteEventArgs<IMember> e)
{
foreach (var m in e.DeletedEntities.ToArray())
{
DistributedCache.Instance.RemoveMemberCache(m.Id);
}
DistributedCache.Instance.RemoveMemberCache(e.DeletedEntities.ToArray());
}
static void MemberServiceSaved(IMemberService sender, Core.Events.SaveEventArgs<IMember> e)
static void MemberServiceSaved(IMemberService sender, SaveEventArgs<IMember> e)
{
foreach (var m in e.SavedEntities.ToArray())
{
DistributedCache.Instance.RefreshMemberCache(m.Id);
}
DistributedCache.Instance.RefreshMemberCache(e.SavedEntities.ToArray());
}
#endregion
#region Member group event handlers
static void MemberGroupService_Deleted(IMemberGroupService sender, Core.Events.DeleteEventArgs<IMemberGroup> e)
static void MemberGroupService_Deleted(IMemberGroupService sender, DeleteEventArgs<IMemberGroup> e)
{
foreach (var m in e.DeletedEntities.ToArray())
{
@@ -647,7 +641,7 @@ namespace Umbraco.Web.Cache
}
}
static void MemberGroupService_Saved(IMemberGroupService sender, Core.Events.SaveEventArgs<IMemberGroup> e)
static void MemberGroupService_Saved(IMemberGroupService sender, SaveEventArgs<IMemberGroup> e)
{
foreach (var m in e.SavedEntities.ToArray())
{

View File

@@ -256,11 +256,33 @@ namespace Umbraco.Web.Cache
#endregion
#region Member cache
/// <summary>
/// Refreshes the cache among servers for a member
/// </summary>
/// <param name="dc"></param>
/// <param name="members"></param>
public static void RefreshMemberCache(this DistributedCache dc, params IMember[] members)
{
dc.Refresh(new Guid(DistributedCache.MemberCacheRefresherId), x => x.Id, members);
}
/// <summary>
/// Removes the cache among servers for a member
/// </summary>
/// <param name="dc"></param>
/// <param name="members"></param>
public static void RemoveMemberCache(this DistributedCache dc, params IMember[] members)
{
dc.Remove(new Guid(DistributedCache.MemberCacheRefresherId), x => x.Id, members);
}
/// <summary>
/// Refreshes the cache among servers for a member
/// </summary>
/// <param name="dc"></param>
/// <param name="memberId"></param>
[Obsolete("Use the RefreshMemberCache with strongly typed IMember objects instead")]
public static void RefreshMemberCache(this DistributedCache dc, int memberId)
{
dc.Refresh(new Guid(DistributedCache.MemberCacheRefresherId), memberId);
@@ -271,6 +293,7 @@ namespace Umbraco.Web.Cache
/// </summary>
/// <param name="dc"></param>
/// <param name="memberId"></param>
[Obsolete("Use the RemoveMemberCache with strongly typed IMember objects instead")]
public static void RemoveMemberCache(this DistributedCache dc, int memberId)
{
dc.Remove(new Guid(DistributedCache.MemberCacheRefresherId), memberId);

View File

@@ -14,7 +14,7 @@ namespace Umbraco.Web.Cache
/// <remarks>
/// This is not intended to be used directly in your code and it should be sealed but due to legacy code we cannot seal it.
/// </remarks>
public class MemberCacheRefresher : CacheRefresherBase<MemberCacheRefresher>
public class MemberCacheRefresher : TypedCacheRefresherBase<MemberCacheRefresher, IMember>
{
protected override MemberCacheRefresher Instance
@@ -44,6 +44,18 @@ namespace Umbraco.Web.Cache
base.Remove(id);
}
public override void Refresh(IMember instance)
{
ClearCache(instance.Id);
base.Remove(instance);
}
public override void Remove(IMember instance)
{
ClearCache(instance.Id);
base.Remove(instance);
}
private void ClearCache(int id)
{
ApplicationContext.Current.ApplicationCache.ClearPartialViewCache();