博客
关于我
C#语法糖之 cache操作类 asp.net
阅读量:457 次
发布时间:2019-03-06

本文共 5921 字,大约阅读时间需要 19 分钟。

因为考虑到我下面我将写session cookies 等 操作类 ,与cache具有共性。 所以都统一继承了IHttpStorageObject  abstract class 来保函数风格的统一 ,但是又为了调用方便,抽象中又使用了单例来简化调用。

 

 

使用方法很简单:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using System.Web.Caching;using System.Collections;using System.Linq.Expressions;namespace SyntacticSugar{    ///     /// ** 描述:缓存操作类    /// ** 创始时间:2015-6-9    /// ** 修改时间:-    /// ** 作者:sunkaixuan    /// ** 使用说明:http://www.cnblogs.com/sunkaixuan/p/4563462.html    ///     /// 
///
public class CacheManager
: IHttpStorageObject
{ #region 全局变量 private static CacheManager
_instance = null; private static readonly object _instanceLock = new object(); #endregion #region 构造函数 private CacheManager() { } #endregion #region 属性 ///
///根据key获取value /// ///
public override V this[string key] { get { return (V)HttpRuntime.Cache[CreateKey(key)]; } } #endregion #region 公共函数 ///
/// key是否存在 /// ///
key ///
/// 存在
true
不存在
false
. /// ///
public override bool ContainsKey(string key) { return HttpRuntime.Cache[CreateKey(key)] != null; } ///
/// 获取缓存值 /// ///
key ///
public override V Get(string key) { return (V)HttpRuntime.Cache.Get(CreateKey(key)); } ///
/// 获取实例 (单例模式) /// ///
public static CacheManager
GetInstance() { if (_instance == null) lock (_instanceLock) if (_instance == null) _instance = new CacheManager
(); return _instance; } ///
/// 插入缓存(默认20分钟) /// ///
key ///
value public override void Add(string key, V value) { Add(key, value, Minutes*20); } ///
/// 插入缓存 /// ///
key ///
value ///
过期时间单位秒 public void Add(string key, V value, int cacheDurationInSeconds) { Add(key, value, cacheDurationInSeconds, CacheItemPriority.Default); } ///
/// 插入缓存. /// ///
key ///
value ///
过期时间单位秒 ///
缓存项属性 public void Add(string key, V value, int cacheDurationInSeconds, CacheItemPriority priority) { string keyString = CreateKey(key); HttpRuntime.Cache.Insert(keyString, value, null, DateTime.Now.AddSeconds(cacheDurationInSeconds), Cache.NoSlidingExpiration, priority, null); } ///
/// 插入缓存. /// ///
key ///
value ///
过期时间单位秒 ///
缓存项属性 public void Add(string key, V value, int cacheDurationInSeconds, CacheDependency dependency, CacheItemPriority priority) { string keyString = CreateKey(key); HttpRuntime.Cache.Insert(keyString, value, dependency, DateTime.Now.AddSeconds(cacheDurationInSeconds), Cache.NoSlidingExpiration, priority, null); } ///
/// 删除缓存 /// ///
key public override void Remove(string key) { HttpRuntime.Cache.Remove(CreateKey(key)); } ///
/// 清除所有缓存 /// public override void RemoveAll() { System.Web.Caching.Cache cache = HttpRuntime.Cache; IDictionaryEnumerator CacheEnum = cache.GetEnumerator(); ArrayList al = new ArrayList(); while (CacheEnum.MoveNext()) { al.Add(CacheEnum.Key); } foreach (string key in al) { cache.Remove(key); } } ///
/// 清除所有包含关键字的缓存 /// ///
关键字 public override void RemoveAll(Func
removeExpression) { System.Web.Caching.Cache _cache = HttpRuntime.Cache; var allKeyList = GetAllKey(); var delKeyList = allKeyList.Where(removeExpression).ToList(); foreach (var key in delKeyList) { Remove(key); } } ///
/// 获取所有缓存key /// ///
public override IEnumerable
GetAllKey() { IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator(); while (CacheEnum.MoveNext()) { yield return CacheEnum.Key.ToString(); } } #endregion #region 私有函数 ///
///创建KEY /// ///
Key ///
private string CreateKey(string key) { return "http_cache_"+key.ToString(); } #endregion }}

  

using System;namespace SyntacticSugar{    public abstract class IHttpStorageObject
{ public int Minutes = 60; public int Hour = 60 * 60; public int Day = 60 * 60 * 24; public System.Web.HttpContext context = System.Web.HttpContext.Current; public abstract void Add(string key, V value); public abstract bool ContainsKey(string key); public abstract V Get(string key); public abstract global::System.Collections.Generic.IEnumerable
GetAllKey(); public abstract void Remove(string key); public abstract void RemoveAll(); public abstract void RemoveAll(Func
removeExpression); public abstract V this[string key] { get; } }}

  

你可能感兴趣的文章
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>