private void AddToCache(ICacheResult query, object result)
 {
     if (query != null)
     {
         if (query is ICacheResultWithRegion queryWithRegion)
         {
             _cacheManager.Add(new CacheItem <object>(
                                   query.CacheKey,
                                   queryWithRegion.Region,
                                   result,
                                   ExpirationMode.Absolute,
                                   query.CacheDuration));
             _logger.LogDebug($"Query result added to cache with key {query.CacheKey} with region {queryWithRegion.Region} with duration {query.CacheDuration}");
         }
         else
         {
             _cacheManager.Add(new CacheItem <object>(
                                   query.CacheKey,
                                   result,
                                   ExpirationMode.Absolute,
                                   query.CacheDuration));
             _logger.LogDebug($"Query result added to cache with key {query.CacheKey} with duration {query.CacheDuration}");
         }
     }
 }
Ejemplo n.º 2
0
        public ICacheResult <T> GetOrSet <T>(string key, Func <T> func, int expiredTime = 3600) where T : class
        {
            ICacheResult <T> cacheResult = this.Get <T>(key);

            expiredTime = (expiredTime <= 0 ? 3600 : expiredTime);
            if ((cacheResult.Status != Status.Success ? true : !cacheResult.Success))
            {
                try
                {
                    T t = func();
                    this.Set <T>(key, t, expiredTime);
                    cacheResult.Value   = t;
                    cacheResult.Success = true;
                    cacheResult.Status  = Status.Success;
                }
                catch (Exception exception)
                {
                    cacheResult.Exception = exception;
                    cacheResult.Success   = false;
                    cacheResult.Value     = default(T);
                    cacheResult.Status    = Status.None;
                }
            }
            return(cacheResult);
        }
Ejemplo n.º 3
0
        public ICacheResult <TResult> GetOrSet <TParam, TResult>(string key, Func <TParam, TResult> func, TParam param, int expiredTime = 3600) where TResult : class
        {
            ICacheResult <TResult> cacheResult = this.Get <TResult>(key);

            expiredTime = (expiredTime <= 0 ? 3600 : expiredTime);
            if ((cacheResult.Status != Status.Success ? true : !cacheResult.Success))
            {
                try
                {
                    TResult tResult = func(param);
                    this.Set <TResult>(key, tResult, expiredTime);
                    cacheResult.Value   = tResult;
                    cacheResult.Success = true;
                    cacheResult.Status  = Status.Success;
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    cacheResult.Exception = exception;
                    cacheResult.Success   = false;
                    cacheResult.Value     = default(TResult);
                    cacheResult.Status    = Status.None;
                    DebugUtil.CollectDebugInfo(string.Format("GetOrSet<TPara, TResult>('{0}'), Exception:{1}", key, exception.Message));
                }
            }
            return(cacheResult);
        }
Ejemplo n.º 4
0
        public ICacheResult Remove(string key)
        {
            ICacheResult cacheResult = new CacheResult()
            {
                Success = false,
                Status  = Status.None
            };
            ICacheResult cacheResult1 = cacheResult;

            try
            {
                cacheResult1.Success = this.db.KeyDelete(KeyGen.AttachPrefixToKey(key), 0);
                cacheResult1.Status  = (cacheResult1.Success ? Status.Success : Status.None);
            }
            catch (Exception exception)
            {
                cacheResult1.Exception = exception;
            }
            return(cacheResult1);
        }
Ejemplo n.º 5
0
        public static void Cache <TReturnType>(this Aspect aspect, ICache cacheResolver, string key, Action work, Func <TReturnType, TReturnType> foundInCache, int expiredTime = 3600)
        {
            ICacheResult <TReturnType> cacheResult = cacheResolver.Get <TReturnType>(key);

            if (cacheResult.Value != null)
            {
                TReturnType tReturnType = foundInCache(cacheResult.Value);
                if (tReturnType != null)
                {
                    aspect.WorkDelegate = new Func <TReturnType>(() => tReturnType);
                }
                else
                {
                    CacheAspectEx.GetResult <TReturnType>(aspect, cacheResolver, key, expiredTime);
                }
            }
            else
            {
                CacheAspectEx.GetResult <TReturnType>(aspect, cacheResolver, key, expiredTime);
            }
            work();
        }
Ejemplo n.º 6
0
        public ICacheResult <TResult> GetOrSet <TParam, TResult>(string key, Func <TParam, TResult> func, TParam param, int expiredTime = 3600) where TResult : class
        {
            ICacheResult <TResult> cacheResult = this.Get <TResult>(key);

            expiredTime = (expiredTime <= 0 ? 3600 : expiredTime);
            if ((cacheResult.Value == null || !cacheResult.Success ? true : cacheResult.Status != Status.Success))
            {
                try
                {
                    TResult tResult = func(param);
                    this.Set <TResult>(key, tResult, expiredTime);
                    cacheResult.Value   = tResult;
                    cacheResult.Success = true;
                }
                catch (Exception exception)
                {
                    cacheResult.Exception = exception;
                    cacheResult.Success   = false;
                    cacheResult.Value     = default(TResult);
                }
            }
            return(cacheResult);
        }