【问题标题】:how to properly cache data in a self-hosted WebAPI application如何在自托管 WebAPI 应用程序中正确缓存数据
【发布时间】:2015-03-25 16:21:35
【问题描述】:

我有一个使用 TopShelf 自托管的 C# WebAPI 应用程序。 我需要通过在应用程序启动时查询一些数据库来优化我的一些数据访问,然后缓存结果(是静态的)以供我的 WebAPI 控制器进行任何后续访问。 我的解决方案包含两个项目:

ServiceHub.Topshelf.WebAPI(包含所有业务逻辑)和 Topshelf.WebPI(仅托管 WebApiConfigurator.cs)

进行此类数据缓存的正确技术是什么?

【问题讨论】:

标签: c# asp.net-web-api


【解决方案1】:

正如 Ric 所建议的,我查看了 Cache 类。这是我在 SIgnedContractsController.csc 中完成缓存的操作:

using System.Runtime.Caching;
.....
ObjectCache cache;
List<Model.SignedContracts> allSignedContracts;
.....

cache = MemoryCache.Default;
            allSignedContracts = cache["signed_contracts"] as List<Model.SignedContracts>;

            if (allSignedContracts == null)
            {
                allSignedContracts = new List<Model.SignedContracts>();
                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.Now.AddHours(1.0);
                var result = (from contracts in new XPQuery<Model.SignedContracts>(uow) select contracts);
                foreach (var item in result)
                {
                    allSignedContracts.Add(item); 
                }
                cache.Add("signed_contracts",allSignedContracts,policy);

            }

然后,在 GET 方法中我这样做了:

public HttpResponseMessage Get()
        {

            var _americasPriorWeekThree = Convert.ToInt32((from contracts in allSignedContracts
                                                           where contracts.Region == "Americas"
                                                       select contracts.PriorWeek3).First());

.......

【讨论】:

  • 不错的一个。做这种事很常见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2021-06-20
  • 2019-06-05
  • 2016-10-14
  • 2019-12-11
相关资源
最近更新 更多