【发布时间】:2018-09-13 17:17:34
【问题描述】:
我有一个 WEB API 方法,其中在一个操作方法中我构建了一个模型,其中 1 个字段是从外部 API 构建的。但是速度优化很重要,我想将单个请求缓存到外部 API X 分钟。我正在尝试使用 HttpClient 和 Delegating 处理程序来实现它,但欢迎使用其他任何东西。
【问题讨论】:
标签: c# asp.net asp.net-web-api asp.net-core asp.net-web-api2
我有一个 WEB API 方法,其中在一个操作方法中我构建了一个模型,其中 1 个字段是从外部 API 构建的。但是速度优化很重要,我想将单个请求缓存到外部 API X 分钟。我正在尝试使用 HttpClient 和 Delegating 处理程序来实现它,但欢迎使用其他任何东西。
【问题讨论】:
标签: c# asp.net asp.net-web-api asp.net-core asp.net-web-api2
对我来说,更好的解决方案是将 WEB Api 的结果缓存在 内存缓存 或 分布式缓存
这里是我为分布式缓存做的实现
private readonly IDistributedCache _cache;
public Constructor(IDistributedCache cache)
{
_cache = cache;
}
public async Task<MyModel> GetWebApiData(double? latitude, double? longitude)
{
var key = $"MyKey";
var cachedValue = await _cache.GetAsync(key);
if (cachedValue == null)
{
data = "CallWebApi"
await SetDataToCache(key, data);
}
else
{
data = JsonConvert.DeserializeObject<MyModel>(Encoding.UTF8.GetString(cachedValue));
}
}
public async Task SetDataToCache(string key, MyModel data)
{
if (data != null)
{
var json = JsonConvert.SerializeObject(data);
await _cache.SetAsync(key, Encoding.ASCII.GetBytes(json), new DistributedCacheEntryOptions()
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});
}
}
【讨论】: