内容丰富的 .NET 缓存
Contentful .NET caching
有谁知道是否存在通过 .NET Contentful SDK 使用缓存的现有方法,例如您可以使用 the PHP one 做什么?还是滚动自己的缓存机制的唯一选择?
这种类型的缓存目前在 .NET SDK 中不可用。
只需使用您自己的实现扩展 IContentfulClient
接口就相当容易,例如 CachingContentfulClient
,这将仅在会话或应用程序存储中按 ID 存储每个条目,并且仅获取那些条目缓存中不存在。
类似于:
public class CachingContentfulClient {
private IContentfulClient _inner;
public CachingContentfulClient(IContentfulClient inner) {
_inner = inner;
}
public async Task<ContentfulCollection<T>> GetEntries<T>(string queryString = null, CancellationToken cancellationToken = default)
{
//if cache contains stuff, return stuff
//else get stuff from Contentful
if(cacheContainsStuffBasedOnQuery) {
return cachedStuff;
}
return _inner.GetEntries<T>(queryString, cancellationToken);
}
}
如果您是 运行 ASP.NET 核心,您可以使用装饰器模式在 startup.cs
中初始化您的客户端(对此没有 oob 支持,因此您必须手动操作)。
services.AddTransient<IContentfulClient>((s) => {
var httpClient = s.GetService<HttpClient>();
var options = s.GetService<IOptions<ContentfulOptions>>();
var contentfulClient = new ContentfulClient(httpClient, options);
var cachingClient = new CachingContentfulClient(contentfulClient);
return cachingClient;
});
综上所述,来自 Contentful returns 的典型回复非常非常快。我设置了几个基准测试来衡量这类事情。这是最新版本的获取space(这是一个非常简单的操作,获取条目和资产当然会稍微慢一些,但不会慢很多)。
Method | Mean | Error | StdDev | Median |
--------------- |---------:|----------:|---------:|----------:|
GetSpace | 4.489 ms | 0.9696 ms | 20.82 ms | 2.0922 ms |
GetSpaceCached | 2.075 ms | 0.9627 ms | 20.68 ms | 0.0003 ms |
因此,虽然从缓存中获取某些东西显然非常快(这里的平均值是有偏差的,因为第一个请求需要填充缓存,一旦缓存被填充,它大约是 3-4 nano 秒),获取 space 的平均时间为 4 毫秒。通常,与缓存 Contentful 响应相比,您的代码中还有其他瓶颈需要更多关注。
有谁知道是否存在通过 .NET Contentful SDK 使用缓存的现有方法,例如您可以使用 the PHP one 做什么?还是滚动自己的缓存机制的唯一选择?
这种类型的缓存目前在 .NET SDK 中不可用。
只需使用您自己的实现扩展 IContentfulClient
接口就相当容易,例如 CachingContentfulClient
,这将仅在会话或应用程序存储中按 ID 存储每个条目,并且仅获取那些条目缓存中不存在。
类似于:
public class CachingContentfulClient {
private IContentfulClient _inner;
public CachingContentfulClient(IContentfulClient inner) {
_inner = inner;
}
public async Task<ContentfulCollection<T>> GetEntries<T>(string queryString = null, CancellationToken cancellationToken = default)
{
//if cache contains stuff, return stuff
//else get stuff from Contentful
if(cacheContainsStuffBasedOnQuery) {
return cachedStuff;
}
return _inner.GetEntries<T>(queryString, cancellationToken);
}
}
如果您是 运行 ASP.NET 核心,您可以使用装饰器模式在 startup.cs
中初始化您的客户端(对此没有 oob 支持,因此您必须手动操作)。
services.AddTransient<IContentfulClient>((s) => {
var httpClient = s.GetService<HttpClient>();
var options = s.GetService<IOptions<ContentfulOptions>>();
var contentfulClient = new ContentfulClient(httpClient, options);
var cachingClient = new CachingContentfulClient(contentfulClient);
return cachingClient;
});
综上所述,来自 Contentful returns 的典型回复非常非常快。我设置了几个基准测试来衡量这类事情。这是最新版本的获取space(这是一个非常简单的操作,获取条目和资产当然会稍微慢一些,但不会慢很多)。
Method | Mean | Error | StdDev | Median |
--------------- |---------:|----------:|---------:|----------:|
GetSpace | 4.489 ms | 0.9696 ms | 20.82 ms | 2.0922 ms |
GetSpaceCached | 2.075 ms | 0.9627 ms | 20.68 ms | 0.0003 ms |
因此,虽然从缓存中获取某些东西显然非常快(这里的平均值是有偏差的,因为第一个请求需要填充缓存,一旦缓存被填充,它大约是 3-4 nano 秒),获取 space 的平均时间为 4 毫秒。通常,与缓存 Contentful 响应相比,您的代码中还有其他瓶颈需要更多关注。