public CacheType(ExpiredTimeType type, int validTime) { this.mTables = new Hashtable(50000); switch (type) { case ExpiredTimeType.D: this.mTimeout = new TimeSpan(validTime, 0, 0, 0); return; case ExpiredTimeType.H: this.mTimeout = new TimeSpan(validTime, 0, 0); return; case ExpiredTimeType.M: this.mTimeout = new TimeSpan(0, validTime, 0); return; default: this.mTimeout = new TimeSpan(1, 0, 0, 0); return; } }
public CacheLayer(int count, ExpiredTimeType type, int validTime, int upgradeHit) { this.mTables = new Hashtable(count); this.mCount = count; switch (type) { case ExpiredTimeType.D: this.mTimeout = new TimeSpan(validTime, 0, 0, 0); break; case ExpiredTimeType.H: this.mTimeout = new TimeSpan(validTime, 0, 0); break; case ExpiredTimeType.M: this.mTimeout = new TimeSpan(0, validTime, 0); break; default: this.mTimeout = new TimeSpan(1, 0, 0, 0); break; } this.UpgradeHit = upgradeHit; }
/// <summary> /// 添加,已存在则更新缓存 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="expiredTime">超期时间</param> /// <param name="expiredTimeType">超期类型</param> /// <param name="changeToken">超期自定义ChangeToken,可用以自定义条件和回调</param> /// <returns></returns> public void Set(string key, object value, TimeSpan expiredTime = default(TimeSpan), ExpiredTimeType expiredTimeType = ExpiredTimeType.Absolute, IChangeToken changeToken = null) { //设置默认超时时间 if (expiredTime == default(TimeSpan)) { expiredTime = TimeSpan.FromMinutes(20); } object obj; var isExist = _memoryCache.TryGetValue(key, out obj); if (!isExist) { _memoryCache.GetOrCreate(key, v =>//幻读? { switch (expiredTimeType) { case ExpiredTimeType.Absolute: v.SetAbsoluteExpiration(expiredTime); break; case ExpiredTimeType.Sliding: v.SetSlidingExpiration(expiredTime); break; case ExpiredTimeType.Custom: v.AddExpirationToken(changeToken); break; default: break; } return(value); }); } else { switch (expiredTimeType) { case ExpiredTimeType.Absolute: _memoryCache.Set(key, value, DateTime.UtcNow.Add(expiredTime)); break; case ExpiredTimeType.Sliding: _memoryCache.Set(key, value, expiredTime); break; case ExpiredTimeType.Custom: _memoryCache.Set(key, value, changeToken); break; default: break; } } }
/// <summary> /// 添加,已存在则抛错 /// </summary> /// <param name="key">缓存key</param> /// <param name="value">缓存value</param> /// <param name="expiredTime">超期时间</param> /// <param name="expiredTimeType">超期类型</param> /// <param name="changeToken">超期自定义ChangeToken,可用以自定义条件和回调</param> /// <returns></returns> public void Add(string key, object value, TimeSpan expiredTime = default(TimeSpan), ExpiredTimeType expiredTimeType = ExpiredTimeType.None, IChangeToken changeToken = null) { object obj; var isExist = _memoryCache.TryGetValue(key, out obj); if (isExist) { throw new Exception("Cache contains this key!"); } this.Set(key, value, expiredTime, expiredTimeType, changeToken); }