内容式.NET缓存

内容式.NET缓存,.net,contentful,.net,Contentful,有人知道是否有一种现有的方法可以在.NET Contentful SDK中使用缓存,例如您可以用它做什么吗?或者是推出您自己的缓存机制的唯一选项?该类型的缓存目前在.NET SDK中不可用 只需使用自己的实现扩展IContentfulClient接口就相当容易了,比如说CachingContentfulClient,它将仅在会话或应用程序存储中按id存储每个条目,并仅获取缓存中不存在的条目 比如: public class CachingContentfulClient { privat

有人知道是否有一种现有的方法可以在.NET Contentful SDK中使用缓存,例如您可以用它做什么吗?或者是推出您自己的缓存机制的唯一选项?

该类型的缓存目前在.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);
   }
}
综上所述,知足的典型反应会非常、非常迅速地返回。我设置了几个基准测试来衡量这类事情。下面是获取空间的最新版本(这是一个非常简单的操作,获取条目和资产当然会稍微慢一点,但不会慢很多)


因此,虽然从缓存中获取数据显然非常快(这里的平均值是倾斜的,因为第一个请求需要填充缓存,一旦缓存被填充,大约需要3-4纳秒),获取空间的平均时间为4毫秒。通常情况下,您的代码中还有其他瓶颈,需要比缓存内容响应更多的关注。

对于这个答案,我感激不尽Robban,这是我收到的关于堆栈溢出的最好答案之一。干杯非常感谢。很乐意帮忙。
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;
        });
         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 |