有没有人知道是否存在使用.NET Contentful SDK进行缓存的现有方法,例如您可以使用the PHP one做什么?或者是推出自己的缓存机制的唯一选择?
答案 0 :(得分:2)
.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 Core,那么您可以使用装饰器模式在startup.cs
中初始化您的客户端(没有oob支持,所以你必须这样做)。< / p>
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的典型回复非常非常快。我有几个基准测试设置来测量这种类型的东西。这是获取空间的最新版本(这是一个非常简单的操作,获取条目和资产当然稍慢,但不是很多)。
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 秒),获取空间的平均时间是4毫秒。通常,您的代码中存在其他瓶颈,需要更多关注而不是缓存Contentful响应。