Browse Source

Much better caching for pages

pull/17642/head
Enis Necipoglu 3 years ago
parent
commit
fd903c25db
No known key found for this signature in database GPG Key ID: 1EC55E13241E1680
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs
  2. 35
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs

@ -16,5 +16,5 @@ public static class PageConsts
public static int MaxStyleLength { get; set; } = int.MaxValue;
public static string DefaultHomePageCacheKey { get; set; } = "CmsKit_DefaultHomePage";
public static string DefaultHomePageCacheKey { get; set; } = "__DefaultHomePage";
}

35
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs

@ -17,7 +17,7 @@ namespace Volo.CmsKit.Public.Pages;
public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppService
{
protected IPageRepository PageRepository { get; }
protected PageManager PageManager { get; }
protected PageManager PageManager { get; }
protected IDistributedCache<PageCacheItem> PageCache { get; }
@ -25,18 +25,28 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
{
PageRepository = pageRepository;
PageManager = pageManager;
PageCache = pageCache;
PageCache = pageCache;
}
public virtual async Task<PageDto> FindBySlugAsync(string slug)
{
var page = await PageRepository.FindBySlugAsync(slug);
if (page == null)
var pageCacheItem = await PageCache.GetOrAddAsync(CalculatePageCacheKey(slug), async () =>
{
var page = await PageRepository.GetBySlugAsync(slug);
if (page is null)
{
return null;
}
return ObjectMapper.Map<Page, PageCacheItem>(page);
});
if (pageCacheItem is null)
{
return null;
}
return ObjectMapper.Map<Page, PageDto>(page);
return ObjectMapper.Map<PageCacheItem, PageDto>(pageCacheItem);
}
public virtual async Task<PageDto> FindDefaultHomePageAsync()
@ -59,8 +69,19 @@ public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppSe
return ObjectMapper.Map<PageCacheItem, PageDto>(pageCacheItem);
}
public Task<bool> DoesSlugExistAsync([NotNull] string slug)
public async Task<bool> DoesSlugExistAsync([NotNull] string slug)
{
var cached = await PageCache.GetAsync(CalculatePageCacheKey(slug));
if (cached is not null)
{
return true;
}
return await PageRepository.ExistsAsync(slug);
}
protected virtual string CalculatePageCacheKey([NotNull] string slug)
{
return PageRepository.ExistsAsync(slug);
return $"Page_{slug}";
}
}

Loading…
Cancel
Save