Faster cache key generation (#13504)

* Reduce the number of string concatenations required to generate cache keys.
* Updated to match existing Nucache keys.

---------

(cherry picked from commit 7c30da9fbf)
This commit is contained in:
Chad
2023-03-14 02:06:02 +13:00
committed by Sebastiaan Janssen
parent d4970ed752
commit 7c77fd1ca9

View File

@@ -4,35 +4,88 @@ namespace Umbraco.Cms.Infrastructure.PublishedCache;
internal static class CacheKeys
{
public static string PublishedContentChildren(Guid contentUid, bool previewing) =>
"NuCache.Content.Children[" + DraftOrPub(previewing) + ":" + contentUid + "]";
public static string PublishedContentChildren(Guid contentUid, bool previewing)
{
if (previewing)
{
return "NuCache.Content.Children[D::" + contentUid + "]";
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static string DraftOrPub(bool previewing) => previewing ? "D:" : "P:";
return "NuCache.Content.Children[P::" + contentUid + "]";
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static string LangId(string? culture)
=> string.IsNullOrEmpty(culture) ? string.Empty : "-L:" + culture;
public static string ContentCacheRoots(bool previewing)
{
if (previewing)
{
return "NuCache.ContentCache.Roots[D:]";
}
public static string ContentCacheRoots(bool previewing) =>
"NuCache.ContentCache.Roots[" + DraftOrPub(previewing) + "]";
return "NuCache.ContentCache.Roots[P:]";
}
public static string MediaCacheRoots(bool previewing) => "NuCache.MediaCache.Roots[" + DraftOrPub(previewing) + "]";
public static string MediaCacheRoots(bool previewing)
{
if (previewing)
{
return "NuCache.MediaCache.Roots[D:]";
}
return "NuCache.MediaCache.Roots[P:]";
}
public static string PublishedContentAsPreviewing(Guid contentUid) =>
"NuCache.Content.AsPreviewing[" + contentUid + "]";
public static string ProfileName(int userId) => "NuCache.Profile.Name[" + userId + "]";
public static string PropertyCacheValues(Guid contentUid, string typeAlias, bool previewing) =>
"NuCache.Property.CacheValues[" + DraftOrPub(previewing) + contentUid + ":" + typeAlias + "]";
public static string PropertyCacheValues(Guid contentUid, string typeAlias, bool previewing)
{
if (previewing)
{
return "NuCache.Property.CacheValues[D:" + contentUid + ":" + typeAlias + "]";
}
return "NuCache.Property.CacheValues[P:" + contentUid + ":" + typeAlias + "]";
}
// routes still use int id and not Guid uid, because routable nodes must have
// a valid ID in the database at that point, whereas content and properties
// may be virtual (and not in umbracoNode).
public static string ContentCacheRouteByContent(int id, bool previewing, string? culture) =>
"NuCache.ContentCache.RouteByContent[" + DraftOrPub(previewing) + id + LangId(culture) + "]";
public static string ContentCacheRouteByContent(int id, bool previewing, string? culture)
{
if (string.IsNullOrEmpty(culture))
{
if (previewing)
{
return "NuCache.ContentCache.RouteByContent[D:" + id +"]";
}
public static string ContentCacheContentByRoute(string route, bool previewing, string? culture) =>
"NuCache.ContentCache.ContentByRoute[" + DraftOrPub(previewing) + route + LangId(culture) + "]";
return "NuCache.ContentCache.RouteByContent[P:" + id + "]";
}
else if (previewing)
{
return "NuCache.ContentCache.RouteByContent[D:" + id + "-L:" + culture + "]";
}
return "NuCache.ContentCache.RouteByContent[P:" + id + "-L:" + culture + "]";
}
public static string ContentCacheContentByRoute(string route, bool previewing, string? culture)
{
if (string.IsNullOrEmpty(culture))
{
if (previewing)
{
return "NuCache.ContentCache.ContentByRoute[D:" + route + "]";
}
return "NuCache.ContentCache.ContentByRoute[P:" + route + "]";
}
else if (previewing)
{
return "NuCache.ContentCache.ContentByRoute[D:" + route + "-L:" + culture + "]";
}
return "NuCache.ContentCache.ContentByRoute[P:" + route + "-L:" + culture + "]";
}
}