2

我的请求中连接了缓存,但我希望能够判断我返回的返回是否实际上来自缓存。有没有办法看到这个?我可以访问代码库进行修改。

ServiceStack 的标准缓存模式:

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
            });
    }
}
4

1 回答 1

3

正如您在评论中提到的,传递给该ToOptimizedResultUsingCache方法的委托仅在缓存中不存在该项目时才执行。我只需将“缓存在”属性添加到响应 DTO 并将其设置在该委托中。

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...
    }
}
于 2013-09-03T16:16:04.590 回答