/// <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); }
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); }
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); }
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); }
/// <summary> /// 获取缓存操作队列 /// </summary> /// <param name="getter">获取缓存操作队列</param> internal CacheGetterGetQueue(CacheGetter getter) { this.getter = getter; }