内容丰富的.NET缓存

问题描述 投票:1回答:1

有没有人知道是否存在使用.NET Contentful SDK进行缓存的现有方法,例如你可以用the PHP one做什么?或者是推出自己的缓存机制的唯一选择?

.net contentful
1个回答
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支持,所以你必须这样做manualy)。

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纳秒),获取空间的平均时间是4毫秒通常,您的代码中存在其他瓶颈,需要比缓存Contentful响应更多关注。

© www.soinside.com 2019 - 2024. All rights reserved.