你的位置:首页 > ASP.net教程

[ASP.net教程]C# ObjectCache、OutputCache缓存


 1 /// <summary> 2   /// 缓存操作类 3   /// </summary> 4   public class Cache 5   { 6     private static List<string> _allUseCacheKey = new List<string>(); 7     private static ObjectCache _cache = MemoryCache.Default; 8  9     /// <summary>10     /// 添加缓存11     /// </summary>12     /// <param name="key">Key 唯一</param>13     /// <param name="value">值</param>14     /// <param name="cacheOffset">超时时间</param>15     public static void Add(string key, object value, DateTimeOffset cacheOffset)16     {17       if (_allUseCacheKey.Contains(key))18       {19         Remove(key);20       }21       _allUseCacheKey.Add(key);22       _cache.Add(key, value, cacheOffset);23     }24 25     /// <summary>26     /// 移除缓存27     /// </summary>28     /// <param name="key">Key</param>29     public static void Remove(string key)30     {31       if (_allUseCacheKey.Contains(key))32       {33         _allUseCacheKey.Remove(key);34       }35       _cache.Remove(key);36     }37 38     /// <summary>39     /// 读取缓存40     /// </summary>41     /// <param name="key">Key</param>42     /// <returns></returns>43     public static object Read(string key)44     {45       if (_allUseCacheKey.Contains(key))46         return _cache[key];47       return null;48     }49 50     /// <summary>51     /// 清除所有缓存52     /// </summary>53     public static void Clear()54     {55       foreach (string value in _allUseCacheKey)56       {57         _cache.Remove(value);58       }59       _allUseCacheKey.Clear();60     }61   }

public class SysuserStorageService{private int _adminId;public SysuserStorageService(int adminId){_adminId = adminId;}/// <summary>/// 缓存一些内容/// </summary>public void Storage(){tbl_admin user = new tbl_admin();//根据实际需求获取对象Cache.Add(_adminId + "-Admin-" + SystemSetting.Wms, user, SystemSetting.OffSetTime);Cache.Add(_adminId + "-LastLoginTime-" + SystemSetting.Wms, DateTime.Now, SystemSetting.OffSetTime);}public tbl_admin GetAdmin{get { return (tbl_admin)Cache.Read(_adminId + "-Admin-" + SystemSetting.Wms); }}public string GetLastLoginTime{get { return ((DateTime)Cache.Read(_adminId + "-LastLoginTime-" + SystemSetting.Wms)).ToString("yyyy-MM-dd HH:mm:ss"); }}}

 public class SystemSetting  {    /// <summary>    /// 缓存定义    /// </summary>    public const string ShopWms = "Wms";    /// <summary>    /// 缓存超时时间    /// </summary>    public static DateTimeOffset OffSetTime = DateTimeOffset.Now.AddHours(24);    /// <summary>    /// 登录Session    /// </summary>    public const string LoginSession = "";  }

SysuserStorageService storage = new SysuserStorageService(AdminId);//根据ID调用
tbl_admin User = storage.GetAdmin;

 

//页面缓存

[OutputCache(Duration = 300, VaryByParam = "productno;brand;years")]

上述代码使用@OutputCatch指令声明了页面缓存,该页面将被缓存300秒。@OutputCatch指令包括10个属性,通过这些属性能够分别为页面的不同情况进行缓存设置,常用的属性如下所示:

 

CacheProfile:获取或设置OutputCacheProfile名称。

Duration:获取或设置缓存项需要保留在缓存中的时间。

VaryByHeader:获取或设置用于改变缓存项的一组都好分隔的HTTP标头名称。

Location:获取或设置一个值,该值确定缓存项的位置,包括Any、Clint、Downstream、None、Server和ServerAndClient。默认值为Any。

VaryByControl:获取或设置一簇分好分隔的控件标识符,这些标识符包含在当前页或用户控件内,用于改变当前的缓存项。

NoStore:获取或设置一个值,该值确定是否设置了“Http Cache-Control:no-store”指令。

VaryByCustom:获取输出缓存用来改变缓存项的自定义字符串列表。

Enabled:获取或设置一个值,该值指示是否对当前内容启用了输出缓存。

VaryByParam:获取查询字符串或窗体POST参数的列表。