public override bool TryGet <T>(string key, out T entry) { Object cacheEntry; Boolean exist = TryGetObject(key, out cacheEntry); if (!exist) { //不存在 entry = default(T); return(false); } if (cacheEntry == null) { //存在但为 null entry = (T)((Object)null); return(true); } if (cacheEntry is T) { //存在,直接返回 entry = (T)cacheEntry; return(true); } //使用与不使用 NewtonsoftJsonTranscoder 的情况下都支持 SlidingCacheWrapper <T> slidingCache; if (SlidingCacheWrapper <T> .IsSlidingCache(cacheEntry, out slidingCache)) { //尝试以 SlidingCacheWrapper<T> 处理 var diffSpan = DateTime.Now.Subtract(slidingCache.SettingTime); //当前时间-设置时间>滑动时间, 已经过期 if (diffSpan > slidingCache.SlidingExpiration) { Expire(key); entry = default(T); return(false); } //当前时间-设置时间> 滑动时间/2, 更新缓存 if (diffSpan.Add(diffSpan) > slidingCache.SlidingExpiration) { Overwrite(key, slidingCache.Value, slidingCache.SlidingExpiration); } entry = slidingCache.Value; } else { //尝试以普通JSON处理 entry = NewtonsoftJsonUtil.EnsureObjectType <T>(cacheEntry); } return(true); }
public override bool TryGet <T>(string key, out T value) { String cacheKey = BuildCacheKey(key); Object cacheValue; var exists = _client.TryGet(cacheKey, out cacheValue); if (!exists) { value = default(T); return(false); } if (cacheValue is T) { value = (T)cacheValue; return(true); } if (cacheValue == null) { value = (T)((Object)null); return(true); } //使用与不使用 NewtonsoftJsonTranscoder 的情况下都支持 SlidingCacheWrapper <T> slidingCache; if (SlidingCacheWrapper <T> .IsSlidingCache(cacheValue, out slidingCache)) { //尝试以 SlidingCacheWrapper<T> 处理 var diffSpan = DateTime.Now.Subtract(slidingCache.SettingTime); //当前时间-设置时间>滑动时间, 已经过期 if (diffSpan > slidingCache.SlidingExpiration) { Expire(key); value = default(T); return(false); } //当前时间-设置时间> 滑动时间/2, 更新缓存 if (diffSpan.Add(diffSpan) > slidingCache.SlidingExpiration) { Overwrite(key, slidingCache.Value, slidingCache.SlidingExpiration); } value = slidingCache.Value; } else { //尝试以普通JSON处理 value = NewtonsoftJsonUtil.EnsureObjectType <T>(cacheValue); } return(true); }