/// <summary> /// 获取value /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public override bool TryGetValue <T>(string key, out T value) { try { T temp = default(T); CacheKeyMapDescriptor cacheKeyMap = EnsureKeyExist(key); OnOperating("开始尝试获取值:starting:key:" + key + ",cacheId:" + cacheKeyMap); if (cacheKeyMap == null) { value = default(T); return(false); } MongoDBCacheEntity entity = GetMongoDBEntity(cacheKeyMap); OnOperating("尝试获取值结束:end:key:" + key + ",cacheId:" + cacheKeyMap.CacheId + ",result:" + JsonConvert.SerializeObject(entity)); value = default(T); value = JsonConvert.DeserializeObject <T>(entity.CacheValue); return(true); } catch (Exception ex) { OnOperating("尝试获取值异常:exception:key:" + key + ",excption:" + JsonConvert.SerializeObject(ex)); value = default(T); return(false); } }
/// <summary> /// 获取value /// </summary> /// <param name="key"></param> /// <returns></returns> public override object GetValue(string key) { try { CacheKeyMapDescriptor cacheKeyMap = EnsureKeyExist(key); OnOperating("开始获取value:starting:key:" + key + ",cacheId:" + cacheKeyMap.CacheId); if (cacheKeyMap == null) { return(null); } MongoDBCacheEntity entity = GetMongoDBEntity(cacheKeyMap); if (entity != null) { OnOperating("获取value成功:end-->:key:" + key + ",cacheId:" + cacheKeyMap.CacheId + ",value:" + entity.CacheValue); return(entity.CacheValue); } OnOperating("获取value失败:未找到key:" + key + "对应的值"); return(null); } catch (Exception ex) { OnOperating("获取value异常:" + JsonConvert.SerializeObject(ex) + ""); return(null); } }
///// <summary> /////设置value ///// </summary> ///// <typeparam name="T"></typeparam> ///// <param name="key"></param> ///// <param name="value"></param> ///// <param name="expireDate"></param> //private override bool SetValue<T>(string key, T value, DateTime expireDate) //{ // try // { // string cacheId = CacheIdGeneratorManger.Instance.GenerateCacheId(); // OnOperating("开始写入值:starting:key:" + key + ",cacheId:" + cacheId + ",value:" + JsonConvert.SerializeObject(value) + ",expireDate:" + expireDate); // MongoDBCacheEntity cache = new MongoDBCacheEntity(); // cache.ApplicationName = this.pApplicationName; // cache.CacheId = cacheId; // cache.Created = DateTime.Now; // cache.CacheKey = key; // cache.ExpireDate = expireDate; // cache.CacheSta = CacheStatus.Effective; // cache.CacheValue = JsonConvert.SerializeObject(value); // MongoCollection<MongoDBCacheEntity> collection = DistributedCacheHelper.GetMongoDBCollection(cacheId); // if (collection != null) // { // try // { // var query = Query.And(Query.EQ("CacheKey", key)); // collection.Remove(query); // } // catch(Exception ex) // { } // WriteConcernResult res = collection.Save(cache); // OnOperating("写入完成end:key:" + key + ",cacheId:" + cacheId + ",result:" + res.Ok + "," + res.ErrorMessage); // if (res.Ok)//成功后 // { // CacheKeyMapManger.Instance.AddCacheKeyMap(key, cacheId, expireDate); // return true; // } // } // return false; // } // catch(Exception ex) // { // OnOperating("写入Excption:key:" + key + ",exception:" + JsonConvert.SerializeObject(ex)); // return false; // } //} /// <summary> /// 设置缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> /// <param name="cacheLimit"></param> /// <returns></returns> public override bool SetValue <T>(string key, T value, Cachelimit cacheLimit, DateTime?expireDate) { try { string cacheId = CacheIdGeneratorManger.Instance.GenerateCacheId(); OnOperating("开始写入值:starting:key:" + key + ",cacheId:" + cacheId + ",value:" + JsonConvert.SerializeObject(value) + ",cacheLimit:" + cacheLimit.ToString()); MongoDBCacheEntity cache = new MongoDBCacheEntity(); cache.ApplicationName = this.pApplicationName; cache.CacheId = cacheId; cache.Created = DateTime.Now; cache.CacheKey = key; cache.ExpireDate = cacheLimit == Cachelimit.Forever ? Convert.ToDateTime("2099-12-30") : (cacheLimit == Cachelimit.CurrentDay ? Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 23:59:59") : Convert.ToDateTime(expireDate)); cache.CacheSta = CacheStatus.Effective; cache.CacheValue = JsonConvert.SerializeObject(value); if (cacheLimit == Cachelimit.ByExpireDate) { } MongoCollection <MongoDBCacheEntity> collection = DistributedCacheHelper.GetMongoDBCollection(cacheId, cacheLimit); if (collection != null) { try { var query = Query.And(Query.EQ("CacheKey", key)); collection.Remove(query); } catch (Exception ex) { } WriteConcernResult res = collection.Save(cache); TimeSpan timespan = cache.ExpireDate.Subtract(DateTime.Now); if (cacheLimit != Cachelimit.Forever) { if (!collection.IndexExists(new IndexKeysBuilder().Ascending("ExpireDate"))) { collection.EnsureIndex(new IndexKeysBuilder().Ascending("ExpireDate"), IndexOptions.SetTimeToLive(timespan)); } } OnOperating("写入完成end:key:" + key + ",cacheId:" + cacheId + ",result:" + res.Ok + "," + res.ErrorMessage); if (res.Ok)//成功后 { CacheKeyMapManger.Instance.AddCacheKeyMap(key, cacheId, expireDate, cacheLimit); return(true); } } return(false); } catch (Exception ex) { OnOperating("写入Excption:key:" + key + ",exception:" + JsonConvert.SerializeObject(ex)); return(false); } }