using System;
using System.Collections;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Caching;
using System.Collections.Generic; namespace Pub.Class
{
/// <summary>
/// Web缓存管理
/// </summary>
public class WebCache
{
#region 构造器
private WebCache() { } static WebCache() {
HttpContext context = HttpContext.Current;
if (context != null) { _cache = (Cache)context.Cache; } else { _cache = HttpRuntime.Cache; }
}
#endregion #region 公有靜态字段
/// <summary>
/// 日缓存因子
/// </summary>
public static readonly int DayFactor = ;
/// <summary>
/// 小时缓存因子
/// </summary>
public static readonly int HourFactor = ;
/// <summary>
/// 分缓存因子
/// </summary>
public static readonly int MinuteFactor = ;
/// <summary>
/// 秒缓存因子
/// </summary>
public static readonly double SecondFactor = 0.2;
#endregion #region 私有静态字段
private static readonly Cache _cache;
/// <summary>
/// 缓存因子
/// </summary>
private static int Factor = ;
#endregion #region 静态方法
public static IList<CachedItem> GetList(){
IList<CachedItem> list = new List<CachedItem>();
IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
while (CacheEnum.MoveNext()) {
list.Add(new CachedItem(CacheEnum.Key.ToString(),CacheEnum.Value.GetType().ToString()));
}
return list;
}
/// <summary>
/// 重新设置缓存因子
/// </summary>
/// <param name="cacheFactor"></param>
public static void ReSetFactor(int cacheFactor) { Factor = cacheFactor; }
/// <summary>
/// 清空所有缓存项目
/// </summary>
public static void Clear() {
IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
ArrayList al = new ArrayList();
while (CacheEnum.MoveNext()) { al.Add(CacheEnum.Key); } foreach (string key in al){ _cache.Remove(key); }
}
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="pattern">缓存键正则匹配模式</param>
public static void RemoveByPattern(string pattern) {
IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
while (CacheEnum.MoveNext()) {
if (regex.IsMatch(CacheEnum.Key.ToString()))
_cache.Remove(CacheEnum.Key.ToString());
}
}
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="key">缓存键名</param>
public static void Remove(string key) { _cache.Remove(key); }
/// <summary>
/// 增加缓存项目
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
public static void Insert(string key, object obj) { Insert(key, obj, null, ); }
/// <summary>
/// 增加缓存项目(缓存时间:小时缓存因子*12)
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="dep">缓存依赖荐</param>
public static void Insert(string key, object obj, CacheDependency dep) { Insert(key, obj, dep, HourFactor * ); }
/// <summary>
/// 增加缓存项目
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="seconds">缓存秒数</param>
public static void Insert(string key, object obj, int seconds) { Insert(key, obj, null, seconds); }
/// <summary>
/// 增加缓存项目
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="seconds">缓存秒数</param>
/// <param name="priority">缓存优先级</param>
public static void Insert(string key, object obj, int seconds, CacheItemPriority priority) { Insert(key, obj, null, seconds, priority); }
/// <summary>
/// 增加缓存项目
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="dep">缓存依赖项</param>
/// <param name="seconds">缓存秒数</param>
public static void Insert(string key, object obj, CacheDependency dep, int seconds) { Insert(key, obj, dep, seconds, CacheItemPriority.Normal); }
/// <summary>
/// 增加缓存
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="dep">缓存依赖项</param>
/// <param name="seconds">缓存秒数</param>
/// <param name="priority">缓存优先级</param>
public static void Insert(string key, object obj, CacheDependency dep, int seconds, CacheItemPriority priority) {
if (obj != null) {
_cache.Insert(key, obj, dep, DateTime.Now.AddSeconds(Factor * seconds), Cache.NoSlidingExpiration, priority, null);
}
}
/// <summary>
/// 微小缓存
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="secondFactor">缓存秒因子</param>
public static void MicroInsert(string key, object obj, int secondFactor) {
if (obj != null) {
_cache.Insert(key, obj, null, DateTime.Now.AddSeconds(Factor * secondFactor), Cache.NoSlidingExpiration);
}
} /// <summary>
/// 增加缓存项目
/// </summary>
/// <param name="key"></param>
/// <param name="obj"></param>
public static void Max(string key, object obj) { Max(key, obj, null); }
/// <summary>
/// 最大缓存对象
/// </summary>
/// <param name="key">缓存键名</param>
/// <param name="obj">缓存对象</param>
/// <param name="dep">缓存依赖项</param>
public static void Max(string key, object obj, CacheDependency dep) {
if (obj != null) {
_cache.Insert(key, obj, dep, DateTime.MaxValue, Cache.NoSlidingExpiration, CacheItemPriority.AboveNormal, null);
}
}
/// <summary>
/// 获取缓存对象
/// </summary>
/// <param name="key">缓存键名</param>
/// <returns>返回缓存对象</returns>
public static object Get(string key) { return _cache[key]; }
/// <summary>
/// 根据秒缓存因子计算秒数
/// </summary>
public static int SecondFactorCalculate(int seconds) { return Convert.ToInt32(Math.Round((double)seconds * SecondFactor)); }
#endregion
}
}

c# web 缓存管理的更多相关文章

  1. 【web性能】 JS、CSS的合并、压缩、缓存管理

    本篇文章主要讨论下目前JS,CSS 合并.压缩.缓存管理存在的一些问题,然后分享下自己项目中用到的1个处理方案,并提供1个实例下载.   存在的问题: 合并.压缩文件主要有2方面的问题: 1. 每次发 ...

  2. 深入System.Web.Caching命名空间 教你Hold住缓存管理

    一,System .Web.Caching与缓存工作机制简介 System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包 ...

  3. Web缓存杂谈

    一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...

  4. HTML5 离线缓存管理库

    一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionsto ...

  5. Spring自定义缓存管理及配置Ehcache缓存

    spring自带缓存.自建缓存管理器等都可解决项目部分性能问题.结合Ehcache后性能更优,使用也比较简单. 在进行Ehcache学习之前,最好对Spring自带的缓存管理有一个总体的认识. 这篇文 ...

  6. Magicodes.WeiChat——缓存管理

    本框架支持缓存管理,内部机制使用开源库CacheManager.支持全局缓存.租户缓存,默认使用的系统缓存实现,可以在Web.config将其配置为其他缓存类型,比如支持Redis.内存等. 开源库地 ...

  7. Web 技术人员需知的 Web 缓存知识(转)

    最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...

  8. Apache-Shiro+Zookeeper系统集群安全解决方案之缓存管理

    上篇[Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理],解决了Shiro在系统集群开发时安全的会话共享问题,系统在使用过程中会有大量的权限检查和用户身份检验动作,为了不频繁 ...

  9. [转载]WEB缓存技术概述

    [原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...

随机推荐

  1. Java FX中TreeView节点选中和双击事件监听

    TreeItem<String> treeRoot = new TreeItem<String>("Root"); treeRoot.setExpanded ...

  2. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  3. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(2)

    12.2安装 Postgres-XC 可以从 http://postgres-xc.sourceforge.net/下载Postgres-XC.对于本书,我们使用1.0.3版本的Postgres-XC ...

  4. SQL Sever 身份验证 sa用户设置

    1.用windows身份验证登陆数据库找到sa用户 2.鼠标右键sa->属性->常规,设置密码. 3.选择状态->登陆选择已启用 4.选中当前数据库 鼠标右键->属性 5.选择 ...

  5. Extjs treePanel 后台Json的两种构建方法

    public string json = ""; public string QueryMenuTreeJson(string ParentID, string userId) { ...

  6. Could not create the view: An unexpected exception was thrown.如何解决

    今天打开Myeclipse10的时候,发现server窗口出现一堆问题,问题如标题,然后下方出现了一堆java.lang.NullPointerException的问题. java.lang.Null ...

  7. 关于linux的systemd的一些事

    1. 输出运行失败的单元: systemctl --failed 2. 所有的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 这两个目录 ...

  8. 「ruby」使用rmagick处理图像

    安装rmagick gem A new release 2.13.2 of RMagick is now available on github as well as rubygems. This r ...

  9. php常见细节错误

    PHP编程中10个最常见的错误 PHP是一种非常流行的开源服务器端脚本语言,你在万维网看到的大多数网站都是使用php开发的.本篇经将为大家介绍PHP开发中10个最常见的问题,希望能够对朋友有所帮助. ...

  10. 【GDI+】继续图形的问题

    现在有一个需求: 一个或多个四个点组成的矩形,一个或多个值指定 下一点->当前点方向的垂直方向是不闭合的. 目前大概有三种情况: 1.只有一个矩形且只有一个指定不闭合方向的时候,此时只用按照指定 ...