我刚刚使用StrathWeb 的库实现了我的 Asp.Net Web API 控制器的输出缓存,该库连接到StackExchange.Redis库,连接到 Azure 托管的 Redis 缓存。
我编写了一个自定义类,该类实现 StrathWeb IApiOutputCache 接口并调用等效的 StackExchange 方法。这在 Global.asax.cs 中注册为缓存输出提供者。
这是一个使用示例:
public class MyApiController : ApiController
{
private const int FIFTEEN_MINUTES_IN_SECONDS = 900;
[CacheOutput(ClientTimeSpan = FIFTEEN_MINUTES_IN_SECONDS, ServerTimeSpan = FIFTEEN_MINUTES_IN_SECONDS)]
async public Task<Data> GetAsync(int param1, string param2)
{
return await GetExpensiveData();
}
[Serializable]
public class Data
{
// Members omitted for brevity
}
}
当调用 api 端点时,我可以看到框架正确调用了我的 IApiOutputCache 类上的所有必需方法:包含、设置和获取。但是,即使找到并返回缓存副本,GetExpensiveData() 方法也会始终运行并返回“新”数据。
没有错误被抛出。缓存似乎正在工作。然而,我的昂贵代码总是被调用。
谢谢你的帮助 :)。