缓存类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. springboot笔记之helloworld

    开发工具:IDEA 2019 springboot版本:2.1.9 一.springboot2.x VS 1.x 基础环境升级 最低 JDK 8,支持 JDK 9,不再支持 Java 6 和 7 依赖 ...

  2. QT use of undeclared identifier 'cout'

    在QT 5.12中直接使用cout将提示错误如下: 添加库 #include<iostream>,并将cout&end改为std::cout&std::endl 代码如下: ...

  3. algorithm下的常用函数

    algorithm下的常用函数 max(),min(),abs() max(x,y)返回x和y中最小的数字 min(x,y)返回x和y中最大的数字 abs(x)返回x的绝对值,注意x应当是整数,如果是 ...

  4. linux源码下载

    概要:本文主要介绍ubuntu环境下,内核源码和命令源码的获取方式. 内核源码: 1.最简洁的方式,使用命令:apt-get source linux-$(uname -r).但配置的源服务器中不一定 ...

  5. LeetCode_9_回文数字

    回文数(LeetCode 9) 1.题目 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: - ...

  6. 一个常用的通过curl发送HTTP请求的函数

    function: function curl_get($url, $params) { return curl_http($url, $params, 'GET'); } function curl ...

  7. hadoop最简伪分布式安装

    本次安装运行过程使用的是Ubuntu16.04 64位+Hadoop2.5.2+jdk1.7.0_75 Notice: Hadoop2.5.2版本默认只支持64位系统 使用的jdk可以为1.7和1.8 ...

  8. iOS App沙盒目录结构

    转自:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件( ...

  9. 2019-11-29-dotnet-core-输出调试信息到-DebugView-软件

    title author date CreateTime categories dotnet core 输出调试信息到 DebugView 软件 lindexi 2019-11-29 10:14:3 ...

  10. VMware虚拟机中CentOS/redhat设置固定IP

    你的笔记本中的VMware中redhat或centOS系统,如果想在上面建站,而又如果你需要在家里和公司都能访问该站(至少希望你自己的笔记本能访问),那么就需要将虚拟机IP设置为固定IP了.以下介绍两 ...