servicestack,Caching,servicestack" /> servicestack,Caching,servicestack" />

Caching ServiceStack-缓存对象有时基于状态

Caching ServiceStack-缓存对象有时基于状态,caching,servicestack,Caching,servicestack,不确定实现此模式的最佳方式-例如,我们的服务返回体育赛事的结果。我们只想在事件结束时将对象放入缓存。如果事件仍在播放,那么我们希望将其保留在缓存之外(因为它经常更改) 使用常规的.TooOptimizedResultusingCache,然后立即从缓存中删除似乎不正确。我的方法是检查事件是否在缓存中,如果不是创建的,则立即返回它(如果不希望缓存),否则使用缓存并返回客户端接受的最佳响应,例如: public object Get(GetEvent request) { var cache

不确定实现此模式的最佳方式-例如,我们的服务返回体育赛事的结果。我们只想在事件结束时将对象放入缓存。如果事件仍在播放,那么我们希望将其保留在缓存之外(因为它经常更改)


使用常规的.TooOptimizedResultusingCache,然后立即从缓存中删除似乎不正确。

我的方法是检查事件是否在缓存中,如果不是创建的,则立即返回它(如果不希望缓存),否则使用缓存并返回客户端接受的最佳响应,例如:

public object Get(GetEvent request)
{
    var cacheKey = $"{nameof(EventResponse)}:{event.Id}";

    var eventResponse = Cache.Get<EventResponse>(cacheKey)
         ?? GetEvent(request.Id);

    if (eventResponse.Result.ExpiredDate == null)
        return eventResponse;

    // Cache and return optimal result for Request
    return base.Request.ToOptimizedResultUsingCache(Cache, cacheKey, () =>
       eventResponse;
}
public对象获取(GetEvent请求)
{
var cacheKey=$“{nameof(EventResponse)}:{event.Id}”;
var eventResponse=Cache.Get(cacheKey)
??GetEvent(请求Id);
if(eventResponse.Result.ExpiredDate==null)
返回事件响应;
//缓存并返回请求的最佳结果
返回base.Request.ToOptimizedResultUsingCache(缓存,缓存键,()=>
事件响应;
}