예제 #1
0
        /// <summary>
        /// Retrieve the object from the cache. A string key is passed as parameter.
        /// </summary>
        /// <param name="key">key of the entry.</param>
        /// <returns>cache entry.</returns>
        internal override CacheEntry GetInternal(object key, bool isUserOperation, OperationContext operationContext)
        {
            if (ServerMonitor.MonitorActivity)
            {
                ServerMonitor.LogClientActivity("LocalCache.Get", "");
            }

            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }

            CacheEntry e = (CacheEntry)_cacheStore.Get(key);

            if (e != null)
            {
                EvictionHint evh = e.EvictionHint;
                if (isUserOperation && _evictionPolicy != null && evh != null && evh.IsVariant)
                {
                    _evictionPolicy.Notify(key, evh, null);
                }
            }

            return(e);
        }
예제 #2
0
        /// <summary>
        /// 取得 Cache Object
        /// </summary>
        /// <returns>
        /// Cache Object
        /// </returns>
        public T Get()
        {
            if (!HasData())
            {
                Bind();
            }

            var model = _cacheStorage.Get(StorageKey);

            return((model == null) ? default(T) : model.Data);
        }
예제 #3
0
        ///// <inheritdoc />
        //public T Get<T>(string key)
        //{
        //    T cacheData = _cacheStorage.Get<T>(key).Result;

        //    if (cacheData == null)
        //    {
        //        return default;
        //    }

        //    return cacheData;
        //}

        ///// <inheritdoc />
        //public T Get<T>(string key, Func<T> dataSourceFunc, TimeSpan expirationTimeSpan)
        //{
        //    T cacheData = _cacheStorage.Get<T>(key).Result;

        //    if (cacheData != null)
        //    {
        //        return cacheData;
        //    }

        //    Task<T> task = TasksWorker.RegisterRequestAndReturnTask(key, dataSourceFunc, _cacheStorage, expirationTimeSpan);
        //    return task.Result;
        //}
        #endregion

        /// <inheritdoc />
        public async Task <T> GetAsync <T>(string key, Func <T> dataSourceFunc, TimeSpan expirationTimeSpan)
        {
            CacheData <T> cacheData = await _cacheStorage.Get <T>(key);

            if (cacheData != null)
            {
                return(cacheData.Value);
            }

            return(await _concurrentCacheTasksManager.RegisterRequestAndReturnTask(key, dataSourceFunc, _cacheStorage, expirationTimeSpan).ConfigureAwait(false));
        }
예제 #4
0
        public Core.Domain.Project.Project GetByID(int projectID)
        {
            var list  = new List <IProject>();
            var query = new Query();

            query.Add(new Criterion("ID", projectID, CriteriaOperator.Equal));

            if (_cache.Get <IList <IProject> >(RAM.Core.ResourceStrings.Cache_Projects) == null)
            {
                return(_repository.FindBy(query).FirstOrDefault <Project>());
            }
            return(_cache.Get <List <Project> >(RAM.Core.ResourceStrings.Cache_Projects).SingleOrDefault(s => s.ID == projectID));
        }
예제 #5
0
        public Banner GetByID(int postID)
        {
            var list  = new List <IBanner>();
            var query = new Query();

            query.Add(new Criterion("ID", postID, CriteriaOperator.Equal));

            if (_cache.Get <IList <IBanner> >(RAM.Core.ResourceStrings.Cache_Banners) == null)
            {
                return(_repository.FindBy(query).FirstOrDefault <Banner>());
            }
            return(_cache.Get <List <Banner> >(RAM.Core.ResourceStrings.Cache_Banners).SingleOrDefault(s => s.ID == postID));
        }
예제 #6
0
        public T Get <T>(string key, Func <T> getFunc, string group = null)
        {
            var val = repo.Get(key);

            if (val != null)
            {
                return((T)val);
            }

            if (group != null)
            {
                groups.AddOrUpdate(
                    group,
                    g => new Tuple <object, HashSet <string> >(new object(), new HashSet <string> {
                    key
                }),
                    (gname, tuple) =>
                {
                    lock (tuple.Item1)
                    {
                        tuple.Item2.Add(key);
                    }

                    return(tuple);
                });
            }

            val = getFunc();

            repo.Insert(key, val);

            return((T)val);
        }
예제 #7
0
        /// <summary>
        /// Adiciona uma dependencia de sincronização para o item associado com a chave informada.
        /// </summary>
        /// <param name="key">Chave do item do cache.</param>
        /// <param name="syncDependency">Instancia da dependencia de sincronização.</param>
        /// <returns>True caso a operação tenha sido executada com sucesso.</returns>
        internal override bool AddInternal(object key, CacheSyncDependency syncDependency)
        {
            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }
            CacheEntry item = (CacheEntry)_cacheStore.Get(key);

            if (item == null)
            {
                return(false);
            }
            item.SyncDependency = syncDependency;
            _cacheStore.Insert(key, item);
            item.LastModifiedTime = DateTime.Now;
            return(true);
        }
예제 #8
0
        /// <summary>
        /// 刪除Cache 相依的其他分頁
        /// </summary>
        protected override void RemoveDependancyCache()
        {
            var pageKeys = _sectionCacheStorage.Get(SectionKey);

            if (pageKeys != null)
            {
                foreach (var pageKey in pageKeys)
                {
                    if (pageKey == StorageKey)
                    {
                        continue;
                    }

                    _cacheStorage.Delete(pageKey);
                }

                _sectionCacheStorage.Delete(SectionKey);
            }
        }
        public GetBlogsResponse GetAll()
        {
            var response = new GetBlogsResponse();
            var list     = new List <IBlog>();

            if (_cache.Get <IList <IBlog> >(RAM.Core.ResourceStrings.Cache_BlogPosts) == null)
            {
                list = _repository.FindAll()
                       .Where(o => o.IsActive = true)
                       .OrderByDescending(o => o.DatePosted).ToList <IBlog>();
                _cache.Store(RAM.Core.ResourceStrings.Cache_BlogPosts, list);
            }
            else
            {
                list = _cache.Get <List <IBlog> >(RAM.Core.ResourceStrings.Cache_BlogPosts);
            }

            if (list != null)
            {
                response.Success  = true;
                response.Message  = "Blogs Retrieved Successfully!";
                response.BlogList = list.ToList <IBlog>();
            }
            else
            {
                response.Success = false;
                response.Message = "Blogs Retrieved Failed!";
            }

            return(response);
        }
예제 #10
0
        public IList <Customer> GetAllCustomers()
        {
            const string storageKey = "GetAllCustomers";

            IList <Customer> customers = _cacheStorage.Get <List <Customer> >(storageKey);

            if (customers == null)
            {
                customers = _customerRepository.GetCustomers();
                _cacheStorage.Store(storageKey, customers);
            }

            return(customers);
        }
예제 #11
0
        public IResult <IReadOnlyCollection <Commercial> > GetCommercials()
        {
            IReadOnlyCollection <Commercial> commercials = _cacheStorage.Get <IReadOnlyCollection <Commercial> >(CACHE_KEY);

            if (commercials == null)
            {
                var commercialResult = _commercialProvider.GetCommercials();
                if (commercialResult.IsSuccess())
                {
                    commercials = commercialResult.GetSuccessResult();
                    _cacheStorage.Add(CACHE_KEY, commercials, CACHE_MINUTES);
                }
                else
                {
                    return(new NoneResult <IReadOnlyCollection <Commercial> >());
                }
            }

            return(new SuccessResult <IReadOnlyCollection <Commercial> >(commercials));
        }
예제 #12
0
        public Token GetToken()
        {
            if (!tokenIsProvided())
            {
                throw new TokenExpiredException();
            }

            Token token = new Token
            {
                AccessValue   = (string)storage.Get("token"),
                ExpirySeconds = (int)storage.Get("tokenexpiry")
            };

            validateToken(token, (DateTime)storage.Get("tokendatetime"));

            return(token);
        }
예제 #13
0
 /// <summary>
 /// 获取缓存数据
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public static Object Get(String key)
 {
     return(cacheInstance.Get(key));
 }