Exemplo n.º 1
0
        /// <summary>
        /// 缓存方法
        /// </summary>
        /// <typeparam name="TData">数据类型</typeparam>
        /// <param name="cacheGetter">取缓存</param>
        /// <param name="sourceGetter">取源数据</param>
        /// <param name="cacheSetter">写缓存</param>
        /// <returns></returns>
        public static TData Get <TData>(CacheGetter <TData> cacheGetter, Func <TData> sourceGetter, Action <TData> cacheSetter)
        {
            TData data;

            //取缓存
            if (cacheGetter(out data))
            {
                return(data);
            }
            //取源数据
            data = sourceGetter();
            //写缓存
            cacheSetter(data);

            return(data);
        }
Exemplo n.º 2
0
        public static TData Get <TData>(
            CacheGetter <TData> cacheGetter,
            Func <TData> sourceGetter,
            Action <TData> cacheSetter)
        {
            TData data;

            if (cacheGetter(out data))
            {
                return(data);
            }

            data = sourceGetter();
            cacheSetter(data);

            return(data);
        }
Exemplo n.º 3
0
        public static TData Get <TData>(
            CacheGetter <TData> cacheGetter, /* get data from cache */
            Func <TData> sourceGetter,       /* get data from source (fairly expensive) */

            Action <TData> cacheSetter /* set the data to cache */)
        {
            TData data;

            if (cacheGetter(out data))
            {
                return(data);
            }

            data = sourceGetter();
            cacheSetter(data);

            return(data);
        }
Exemplo n.º 4
0
        public static IList <T> BulkGetWithCache <T, K>(IEnumerable <K> idList, Func <IEnumerable <K>, IList <T> > realGetter, Func <T, K> keyPropertyGetter,
                                                        CacheGetter <T> cacheGeter, CacheSetter cacheSetter, Func <K, string> keyGenerator)
        {
            if (idList == null || idList.Count() <= 0)
            {
                return(new List <T>(0));
            }
            idList = idList.Distinct();
            List <T> list          = new List <T>(idList.Count());
            List <K> noCacheIdList = new List <K>(idList.Count());

            foreach (var id in idList)
            {
                string key = keyGenerator(id);
                bool   find;
                var    t = cacheGeter(key, out find);
                if (find)
                {
                    list.Add(t);
                }
                else
                {
                    noCacheIdList.Add(id);
                }
            }
            if (noCacheIdList.Count > 0)
            {
                var rst = realGetter(noCacheIdList);
                if (rst != null && rst.Count > 0)
                {
                    list.AddRange(rst);
                    foreach (T obj in rst)
                    {
                        K      id  = keyPropertyGetter(obj);
                        string key = keyGenerator(id);
                        cacheSetter(key, obj);
                    }
                }
            }
            return(list);
        }
Exemplo n.º 5
0
 /// <summary>
 /// 获取缓存操作队列
 /// </summary>
 /// <param name="getter">获取缓存操作队列</param>
 internal CacheGetterGetQueue(CacheGetter getter)
 {
     this.getter = getter;
 }