缓存类Cache的使用

直接先上代码

  public class CacheHelper
{
private static string fileName = @"D:\huage.txt"; /// <summary>
/// 获取Cache
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static object GetCache(string key)
{
var objCache = HttpRuntime.Cache;
return objCache[key];
} /// <summary>
/// 设置当前应用程序指定CacheKey的Cache对象值
/// </summary>
/// <param name="key">索引键值</param>
/// <param name="obj">缓存对象</param>
public static void SetCache(string key, dynamic obj)
{
var objCache = HttpRuntime.Cache;
objCache.Insert(key, obj);
} /// <summary>
/// 设置当前应用程序指定CacheKey的Cache对象值
/// </summary>
/// <param name="key">索引键值</param>
/// <param name="obj">缓存对象</param>
/// <param name="absoluteExpiration">绝对过期时间 要避免可能的本地时间问题(例如从标准时间改为夏时制),请使用 <see cref="P:System.DateTime.UtcNow" /> 而不是 <see cref="P:System.DateTime.Now" /> 作为此参数值</param>
public static void SetCache(string key, dynamic obj, DateTime absoluteExpiration)
{
var objCache = HttpRuntime.Cache;
absoluteExpiration = DateTime.SpecifyKind(absoluteExpiration, DateTimeKind.Utc);
//使用absoluteExpiration(绝对过期时间),怎相对过期时间需要为System.Web.Caching.Cache.NoSlidingExpiration
objCache.Insert(key, obj, null, absoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
} /// <summary>
/// 设置当前应用程序指定CacheKey的Cache对象值
/// </summary>
/// <param name="key">索引键值</param>
/// <param name="obj">缓存对象</param>
/// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔</param>
public static void SetCache(string key, dynamic obj, TimeSpan slidingExpiration)
{
var objCache = HttpRuntime.Cache;
//使用slidingExpiration(相对过期时间),怎相对过期时间需要为System.Web.Caching.Cache.NoAbsoluteExpiration
objCache.Insert(key, obj, null, System.Web.Caching.Cache.NoAbsoluteExpiration, slidingExpiration);
} /// <summary>
/// 缓存依赖
/// </summary>
/// <param name="key">索引键值</param>
/// <param name="value">缓存对象</param>
public static void SetCacheByCacheDependency(string key, object value)
{
System.Web.Caching.CacheDependency cacheDependency = new CacheDependency(fileName);//建立缓存依赖项dp
HttpRuntime.Cache.Insert(key, value, cacheDependency);
} /// <summary>
/// 缓存依赖获取值(不存在就取取值)
/// </summary>
/// <param name="key">索引键值</param>
public static object GetCacheByCacheDependency(string key)
{
if (GetCache(key) == null)
{
var strRes = new System.IO.StreamReader(fileName).ReadToEnd();
SetCacheByCacheDependency(key, strRes);
}
return GetCache(key);
} /// <summary>
///设置数据库缓存依赖(需要配置服务项)
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public static void SetCacheBySqlCacheDependency(string key,object value)
{
var cache = HttpRuntime.Cache;
cache.Insert(key, value, new SqlCacheDependency("test", "user"));
} /// <summary>
/// 获取数据库缓存依赖
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static object GetCacheBySqlCacheDependency(string key)
{
if (GetCache(key) == null)
{
var value = GetList();
SetCacheBySqlCacheDependency(key, value);
}
return GetCache(key);
} public static List<User> GetList()
{
using (SqlConnection conn=new SqlConnection("data source=.;initial catalog=test;user id=sa;password=123"))
{
using (SqlDataAdapter adapter = new SqlDataAdapter("select Id,Name,Age,Password from [user]", conn))
{
var ds=new DataSet();
if(conn.State == ConnectionState.Closed) conn.Open();
adapter.Fill(ds, "myds");
var dt = ds.Tables[0];
return DataTableToList<User>(dt);
}
}
} public static List<T> DataTableToList<T>(DataTable dt)
{
List<T> list = default(List<T>);
if (dt != null && dt.Rows.Count > 0)
{
list = new List<T>();
System.Reflection.PropertyInfo[] propertyInfos = typeof(T).GetProperties();
foreach (DataRow dr in dt.Rows)
{
T t = Activator.CreateInstance<T>();
foreach (var pro in propertyInfos)
{
if (pro.CanWrite && dt.Columns.Contains(pro.Name)) pro.SetValue(t, dr[pro.Name], null);
}
list.Add(t);
}
}
return list;
}
}

  代码通俗易懂,就是将重复使用的东西放入到Cache里面,到期之后程序会自动帮我们清除。但是有时候缓存跟我们要使用的的数据会有差异,这就是缓存跟实际数据不同步造成的结果。这时候Cache里面带了缓存依赖(就是我们的缓存跟他依赖的项目,只要依赖项被修改缓存就会被程序清除)。Cache中有文件、数据库依赖项(其中文件依赖比较简单,数据库依赖代码简单但是需要额外配置服务 这篇文章有介绍数据库配置https://www.cnblogs.com/knowledgesea/p/3904929.html,这篇文章介绍的是配置数据库依赖的细节 https://www.cnblogs.com/zhaojin/archive/2012/03/29/2422986.html)。看上去这些操作可以让我们尽可能的绕过数据库进行客户端的快速响应,但是现在如果应用系统都是很庞大的话。上面所提到的缓存手段,都是在Web服务器本地内存中进行缓存,

现在主流的应用都是分布式系统,这时候这种操作就很鸡肋了。这时候分布式缓存也就应运而生,redis,memcached(http://www.cnblogs.com/zjneter/archive/2007/07/19/822780.html)。总感觉学习的太少啊。。。

C# Cache缓存的应用的更多相关文章

  1. 注释驱动的 Spring cache 缓存介绍

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  2. Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  3. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  4. paip.cache 缓存架构以及性能提升总结

    paip.cache 缓存架构以及性能提升总结 1         缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...

  5. Cache缓存对象缓存对象

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...

  6. 注释驱动的 Spring cache 缓存介绍--转载

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  7. MemCache缓存和C#自带的Cache缓存

    1.MemCache: //初始化 static SockIOPool _pool; // 创建Memcached private static MemcachedClient Create(stri ...

  8. google guava cache缓存基本使用讲解

    代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...

  9. Django学习之十二:Cache 缓存组件

    目录 Django Cache 缓存组件 缓存逻辑伪代码 配置缓存源 可配置参数说明 01. Django的默认缓存 02. 基于Redis的django-redis 03. 自定义cache 04. ...

  10. Nginx 负载均衡的Cache缓存批量清理的操作记录

    1)nginx.conf配置 [root@inner-lb01 ~]# cat /data/nginx/conf/nginx.conf user www; worker_processes 8; #e ...

随机推荐

  1. spring配置添加多个事务(转)

    大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义 ...

  2. 洛谷 P3258 松鼠的新家 题解

    题面 貌似这道题暴力加玄学优化就可以AC? 下面是正解: 1.树链剖分: 我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1.每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加 ...

  3. HNUSTOJ-1674 水果消除(搜索或并查集)

    1674: 水果消除 时间限制: 2 Sec  内存限制: 128 MB提交: 335  解决: 164[提交][状态][讨论版] 题目描述 “水果消除”是一款手机游戏,相信大家都玩过或玩过类似的游戏 ...

  4. JS判断当前页面是在 QQ客户端/微信客户端/iOS浏览器/Android浏览器/PC客户端

    browser.js var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appV ...

  5. SVM支持向量机(2)

    零.各种概念 1.硬间隔最大化   2.硬间隔支持向量机 3.线性支持向量机 软间隔最大化 软间隔支持向量机 4.非线性支持向量机 核函数kernel function 一.理解支持向量机SVM的原理 ...

  6. 可以提升幸福感的js小技巧(下)

    4.数字 4.1 不同进制表示法 ES6中新增了不同进制的书写格式,在后台传参的时候要注意这一点. 29 // 10进制 035 // 8进制29 原来的方式 0o35 // 8进制29 ES6的方式 ...

  7. 使用git配置ssh的文章推荐

    https://blog.51cto.com/sgk2011/1925922 https://www.cnblogs.com/superGG1990/p/6844952.html https://bl ...

  8. kill - 终止进程

    SYNOPSIS(总览) kill[-ssignal|-p][-a]pid... kill -l [ signal ] DESCRIPTION (描述) kill 给指定进程发送指定信号. 如果没有指 ...

  9. Codeforces Round #575 (Div. 3) E. Connected Component on a Chessboard(思维,构造)

    E. Connected Component on a Chessboard time limit per test2 seconds memory limit per test256 megabyt ...

  10. 详解PHP文件下载的原理和实现

    通常文件下载过程是十分简单的,建立一个链接指向到目标文件就可以了.例如下面的链接: XML/HTML代码 <a href=http://www.xxx.com/xxx.rar>点击下载文件 ...