C# ServiceStack:如何判断是否缓存了来自请求的返回?
我在请求中连接了缓存,但是我想知道我要返回的返回是否来自缓存。有没有办法看到这一点?我可以访问代码库进行修改 ServiceStack的标准缓存模式:C# ServiceStack:如何判断是否缓存了来自请求的返回?,c#,caching,
servicestack,C#,Caching,
servicestack,我在请求中连接了缓存,但是我想知道我要返回的返回是否来自缓存。有没有办法看到这一点?我可以访问代码库进行修改 ServiceStack的标准缓存模式: public class OrdersService : Service { public object Get(CachedOrders request) { var cacheKey = "unique_key_for_this_request"; return base.RequestCont
public class OrdersService : Service
{
public object Get(CachedOrders request)
{
var cacheKey = "unique_key_for_this_request";
return base.RequestContext.ToOptimizedResultUsingCache(base.Cache,cacheKey,()=>
{
//Delegate is executed if item doesn't exist in cache
//Any response DTO returned here will be cached automatically
});
}
}
如您在注释中所述,只有在缓存中不存在项时,才会执行传递给
ToOptimizedResultUsingCache
方法的委托。我只想在响应DTO中添加一个“cached at”属性,并在该委托中设置它
public class OrdersService : Service
{
public object Get(CachedOrders request)
{
var cacheKey = "unique_key_for_this_request";
var returnDto = base.RequestContext.ToOptimizedResultUsingCache(base.Cache,cacheKey,() => {
return new MyReturnDto {
CachedAt = DateTime.Now
};
});
}
}
然后可以使用CachedAt
属性查看项目何时被缓存
如果不想修改DTO,可以在缓存结果时使用委托范围之外的变量
public class OrdersService : Service
{
public object Get(CachedOrders request)
{
var cacheKey = "unique_key_for_this_request";
var isCached = false;
var returnDto = base.RequestContext.ToOptimizedResultUsingCache(base.Cache,cacheKey,() => {
isCached = true;
});
// Do something if it was cached...
}
}
你能展示一下缓存代码吗?我很肯定(从mythz)读到,向DTO添加非业务相关数据会破坏ServiceStack中服务的核心实践。我不想在我所有的业务对象中添加CachedAt属性。我更喜欢通过某种方式从我的AppHost或ServiceStack运行时中检测响应是否来自缓存。您最近的编辑是个好主意。缓存返回时,可以将密钥/值对添加到base.Request.Items集合。然后从我的AppHost中,我可以从Items集合中查找密钥,并在那里执行我的逻辑。