C# Cache缓存的应用
缓存类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缓存的应用的更多相关文章
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- 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 ...
- [转]注释驱动的 Spring cache 缓存介绍
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- Cache缓存对象缓存对象
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...
- 注释驱动的 Spring cache 缓存介绍--转载
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- MemCache缓存和C#自带的Cache缓存
1.MemCache: //初始化 static SockIOPool _pool; // 创建Memcached private static MemcachedClient Create(stri ...
- google guava cache缓存基本使用讲解
代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...
- Django学习之十二:Cache 缓存组件
目录 Django Cache 缓存组件 缓存逻辑伪代码 配置缓存源 可配置参数说明 01. Django的默认缓存 02. 基于Redis的django-redis 03. 自定义cache 04. ...
- Nginx 负载均衡的Cache缓存批量清理的操作记录
1)nginx.conf配置 [root@inner-lb01 ~]# cat /data/nginx/conf/nginx.conf user www; worker_processes 8; #e ...
随机推荐
- Java 创建bat命令文件运行可执行jar包
在可执行jar包所在文件夹下创建txt文件(必须在同一文件夹目录下),打开创建的txt文件输入如下内容并保存: @echo off java -jar 包名.jar pause 如下图所示: 然后将后 ...
- Typora---markdown
一级标题 空格 编写内容 有序内容 +Tab 无序内容 -+Tab 代码块 print('hello world!') typora快捷键 标题1==ctrl +1 图片 表格 Ctrl + T 姓名 ...
- Vue源码解读-构造函数
src/core/instance/index.js此文件主要实现了Vue初始化 // 引入模块 import { initMixin } from './init' import { stateMi ...
- Exceptionless
参考 Exceptionless - .Net Core开源日志框架
- 04.AutoMapper 之投影(Projection)
https://www.jianshu.com/p/031553705417 投影(Projection) 投影将源转换为目标而不是扁平化对象模型.如果没有额为的配置AutoMapper需要一个扁平化 ...
- 这才是最完美SSD:性能满血发挥 万里挑一
固态硬盘同质化日益严重,不同品牌的固态盘想要一决高下就只有靠品牌口碑与做工硬实力了. 最近影驰对他们的ONE系列固态硬盘产品进行了一波更新,推出了多种容量的ONE PCIe M.2 SSD,今天我们就 ...
- 电脑系统win7和samba服务器连接不上解决办法
1.修改本地安全策略运行secpol.msc打开“本地安全策略”窗体,依次点开“本地策略”->“安全选项”,修改“网络安全: LAN 管理器身份验证级别”的值为“发送 LM 和 NTLM – 如 ...
- 007-SaltStack之修改salt-minion id
1. 需求背景 之前使用saltstack添加的主机默认使用了hostname作为salt-minion id,而主机名如果没有做规范和规划,是比较难区分属于什么业务或者机器的.我们需要修改salt- ...
- LCA统计
读入挂 inline void read(int &v) { v = ; ; ; ') { if (c == '-') { p = -; } c = getchar(); } ') { v = ...
- react-native启动时红屏报错:Unable to load script.Make sure you're either running a metro server or that ....
一.报错信息内容 我是在Android Studio中运行启动react-native项目时报的这个错误 1.报错提示:Unable to load script.Make sure you're e ...