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); } //check json type entry = NewtonsoftJsonUtil.EnsureObjectType <T>(cacheEntry); return(true); //if (!(cacheEntry is ExpirationWraper<T>)) { // //类型不为 T 也不为 ExpirationWraper<T>,抛出异常 // throw new InvalidOperationException(String.Format("缓存项`[{0}]`类型错误, {1} or {2} ?", // key, cacheEntry.GetType().FullName, typeof(T).FullName)); //} //var cacheWraper = (ExpirationWraper<T>)cacheEntry; ////表示滑动过期缓存项 //if (cacheWraper.SlidingExpiration == Cache.NoSlidingExpiration) { // //绝对时间过期,返回 // entry = cacheWraper.Value; // return true; //} //var diffSpan = DateTime.Now.Subtract(cacheWraper.SettingTime); ////当前时间-设置时间>滑动时间, 已经过期 //if (diffSpan > cacheWraper.SlidingExpiration) { // Expire(key); // entry = default(T); // return false; //} ////当前时间-设置时间> 滑动时间/2, 更新缓存 //if (diffSpan.Add(diffSpan) > cacheWraper.SlidingExpiration) { // entry = cacheWraper.Value; // Overwrite(key, cacheWraper.Value, cacheWraper.SlidingExpiration); //} //entry = cacheWraper.Value; //return true; }
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); }