Cache在.net中的应用

  1. ache是如何工作的

      Cache是分配在服务器上的一个公共的内存片。

      所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是cache越多越好。

      cache是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。

      c.cache可以存放任何对象

  2. Cache如何创建以及如何销毁

      创建cache

      在。Net环境下通过Cache.Insert(stringkey,objecto)方法创建。其中key代表cache的ID,o代表存到cache里的对象。

      销毁cache.

      通过方法Cache.Remove(stringkey)其中key代表cache的ID.

      调用cache.

      Cache支持装箱/拆箱操作。如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作DataSetds=(DataSet)Cache[“dsCache”]来访问它。

  3. 什么时候用cache

      Cache一般用于数据较固定,用的较频繁的地方。例如可以把进销存系统中可以把产品信息存入cache,在用户调用产品信息时通过调用cache即可,这样从很大程度上减少了用户与数据库的交互,提高了系统的性能。反之,cache不适合用在数据变动快,使用范围很窄的地方。例如把一个具体采购单存入cache中。

  4. cache调用注意事项

      Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。所以以下这种调用就会出现异常

      DataSetds=(DataSet)Cache[“cacheds”];

      DataRowdr=ds.Table[0].Row[0];//出错,ds为null值,不存在表0。

      正确的写法应该是:

      DataSetds

      If(Cache[“cacheds”]!=null)

      {

      ds=(DataSet)Cache[“cacheds”];

      }

      Else

      {

      ds=GetDsFromDataBase();

      }

    在.NET中,Cache的存在可以依赖多中方式,主要用到HttpContext.Current.Cache类

  在这里,我主要写几种依赖方式

  1:不依赖任何条件

  HttpContext.Current.Cache.Insert(stringcacheName,objectobj)

  理论上是Cache会永久保存,但是当服务器重新启动,内存紧张的时候也会丢失.

  2:HttpContext.Current.Cache.Insert(stringkey,objectvalue,CacheDependencydependencies,DateTimeabsoluteExpiration,TimeSpanslidingExpiration);

  //CacheDependency缓存依赖项,absoluteExpiration绝对过期时间,slidingExpiration最后一次访问的时间隔

  //我们主要讲两种Cache依赖

  2.1:文件依赖,sosimple//只要文件改动,Cache移出

  HttpContext.Current.Cache.Insert(cacheName,ojb,newSystem.Web.Caching.CacheDependency(FilePath));

  2.2:SqlServer数据库依赖//我这里是SQL2005

  首先看数据库通知是否可用,记得一定要开启通知

  Cache即高速缓存,我想很多人对他的第一印象一定像我一样,感觉他一定能提高系统得性能和运行速度。的确。Net推出cache的初衷确实是这样的。

时间: 2024-11-06 16:15:07

Cache在.net中的应用的相关文章

浅谈数据库系统中的cache(转)

http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转) Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出 的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一

关于缓存中Cookie,Session,Cache的使用

文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息. Session则保存对话信息.Application则是保存在整个应用程序范围内的信息,相当于全局变量. Session Session用来保存每一个用户的专有信息 Session的生存期是用户持续请求时间加上一段时间(一般是20分

浅谈数据库系统中的cache

Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一称为cache. Oracle中的log buffer是解决redo写入的问题,而data buffer cache则解决data block的读写问题.对于Oracle来说,如果IO没有在SG

Linux下free命令输出中buffers/cache详解

第一行我们就不介绍了(含有total的行)红色字体部分比较重要. 第二行和第三行很多人就看的不是太懂.在这里详细说下.相信你看了会多少了解点. 首先来解释下buffers和cache  buffers:自己看看他们的英文解释很容易明白的.         A buffer is something that has yet to be "written" to disk.意思就说将要写入硬盘中的数据的缓存     cache:             A cache is someth

[z]计算机架构中Cache的原理、设计及实现

前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构.指令结构.信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关. 若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力. 如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥出来? 如何减少CPU与内存之间的速度差异?有4种办法:

SylixOS中PPC架构系列介绍-Cache篇

1. Cache简介 Cache:高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandomAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRandomAccessMemory静态存储器)组成.它是位于CPU与内存间的一种容量较小但速度很高的存储器. 2. SylixOS中Cache架构 SylixOS中为了对Cache进行有效的管理,提供了API层的系统接口,隐藏硬件架构之间的差异.在不同的CPU架构下,又各自封装了Arch层的Cach

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

Python中的__new__()方法的使用

__new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object:   @staticmethod # known case of __new__   def __new__(cls, *more): # known special case of object.__new__     """ T.__new__(S, ...) -> a new object with type S, a s

浅谈java中的自动拆装箱

Java在jdk1.5之后推出的一个新特性:自动拆装箱. 该特性不是jvm认可的,而是编译允许 public class Integerdemo03 {     public static void main(String[] args) {         /**          * 编译器在编译下列代码时补充了代码          * Integer n= Integer.valueOf(1);          * 自动装箱          */         int a=100;