/// <summary> /// 得到缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <returns></returns> protected virtual QueryCacheInfo <T> GetQueryCacheInfo <T>(QueryInfo query) { QueryCacheInfo <T> cacheResult = null; if (query.Cache.Time != DateTime.MinValue || query.Cache.TimeSpan != 0) { cacheResult = GetCache <QueryCacheInfo <T> >(query.Cache.Key); } //if ((cacheResult == null || cacheResult.Result==null) && (query.Cache.Time2 != DateTime.MinValue || query.Cache.TimeSpan2 != 0)) //{ // cacheResult = GetCache<QueryCacheInfo<T>>(query.Cache.Key); //} return(cacheResult); }
/// <summary> /// 从缓存中查询 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="obj"></param> /// <returns></returns> protected virtual T GetInfosByCache <T>(QueryInfo query, OrmObjectInfo obj) { SetQueryCustomCacheKey(query, obj); QueryCacheInfo <T> cacheResult = GetQueryCacheInfo <T>(query); if (null == cacheResult || cacheResult.Result == null) { lock (KeyLoker) { cacheResult = GetQueryCacheInfo <T>(query); if (null == cacheResult || cacheResult.Result == null) { cacheResult = new QueryCacheInfo <T> { Result = Executor.GetInfos <T>(obj, query, this, true), DataCount = query.DataCount }; //if (query.Cache.TimeSpan != 0) //{ // SetLocalCache(query.Cache.Key, cacheResult, query.Cache.TimeSpan); //} //else if (query.Cache.Time != DateTime.MinValue) //{ // SetLocalCache(query.Cache.Key, cacheResult, query.Cache.Time); //} if (query.Cache.TimeSpan != 0) { SetCache(query.Cache.Key, cacheResult, query.Cache.TimeSpan); } else if (query.Cache.Time != DateTime.MinValue) { SetCache(query.Cache.Key, cacheResult, query.Cache.Time); } } } } query.DataCount = cacheResult.DataCount; return(cacheResult.Result); }
/// <summary> /// 从缓存中查询 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="obj"></param> /// <returns></returns> protected virtual T GetInfosByCache <T>(QueryInfo query, OrmObjectInfo obj) { SetQueryCustomCacheKey(query, obj); QueryCacheInfo <T> cacheResult = GetQueryCache <T>(obj, query); if (null == cacheResult || cacheResult.Result == null) { lock (KeyLoker) { if (null == cacheResult || cacheResult.Result == null) { cacheResult = new QueryCacheInfo <T> { Result = Executor.GetInfos <T>(obj, query, this, true), DataCount = query.DataCount }; SetQueryCache(obj, query, cacheResult); } } } query.DataCount = cacheResult.DataCount; return(cacheResult.Result); }
/// <summary> /// 得到缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> protected virtual void SetQueryCache <T>(OrmObjectInfo obj, QueryInfo query, QueryCacheInfo <T> cacheResult) { if (query.Cache.Type == CacheType.None) { return; } if (query.Cache.Time == DateTime.MinValue && query.Cache.TimeSpan == 0) { return; } if (query.Cache.Dependencies != null && query.Cache.Dependencies.Count > 0) { foreach (var dependency in query.Cache.Dependencies) { string subVersionKey = GetVersionCacheKey(dependency); var version = GetRemoteCache <string>(subVersionKey); if (string.IsNullOrWhiteSpace(version)) { version = DateTime.Now.ToString("yyyyMMddHHmmss"); if (query.Cache.TimeSpan != 0) { SetRemoteCache(subVersionKey, version, query.Cache.TimeSpan); } else if (query.Cache.Time != DateTime.MinValue) { SetRemoteCache(subVersionKey, version, query.Cache.Time); } } if (query.Cache.TimeSpan != 0) { SetLocalCache(subVersionKey, version, query.Cache.TimeSpan); } else if (query.Cache.Time != DateTime.MinValue) { SetLocalCache(subVersionKey, version, query.Cache.Time); } if (query.Cache.DependencyDelegate != null && !DependencyDelegates.ContainsKey(subVersionKey)) { DependencyDelegates.Add(subVersionKey, query.Cache.DependencyDelegate); } } } if (query.Cache.Type == CacheType.Local || query.Cache.Type == CacheType.LocalAndRemote) { if (query.Cache.TimeSpan != 0) { SetLocalCache(query.Cache.Key, cacheResult, query.Cache.TimeSpan); } else if (query.Cache.Time != DateTime.MinValue) { SetLocalCache(query.Cache.Key, cacheResult, query.Cache.Time); } } if (query.Cache.Type == CacheType.Remote || query.Cache.Type == CacheType.LocalAndRemote) { if (query.Cache.TimeSpan != 0) { SetRemoteCache(query.Cache.Key, cacheResult, query.Cache.TimeSpan); } else if (query.Cache.Time != DateTime.MinValue) { SetRemoteCache(query.Cache.Key, cacheResult, query.Cache.Time); } } }