博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Asp.net]缓存简介
阅读量:6465 次
发布时间:2019-06-23

本文共 2766 字,大约阅读时间需要 9 分钟。

写在前面

针对一些经常访问而很少改变的数据,使用缓存,可以提高性能。缓存是一种用空间换取时间的技术,说的直白点就是,第一次访问从数据库中读取数据,然后将这些数据存在一个地方,比如内存,硬盘中,再次访问的时候,不必再从数据库中读取,而是从内存或者硬盘中读取数据,可以提高访问速度。

缓存

缓存是一种利用空间换取时间的技术,通俗点也就是将得到的数据放在内存中或者硬盘中,在这段时间内服务器不去读取数据库,或真实的数据源,而是读取你存在内存中的数据。

作用:缓存可以有效的缓解数据库的压力。

一个例子

还是先看一个简单的例子,然后对缓存有一个直观的了解。

public partial class CacheIndex : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                DateTime dt = DateTime.Now;                //如果缓存中没有currentTime的值,则设置,否则输出缓存中的值                if (Cache["currentTime"] == null)                {                    //将当前时间存入缓存                    Cache["currentTime"] = dt;                    //输出值                    Response.Write("第一次读取的时间:"+dt.ToString("yyyy-MM-dd HH:mm:ss"));                }                else                {                    //否则输出缓存中的值                    dt = (DateTime)Cache["currentTime"];                    //输出值                    Response.Write("从缓存中读取的时间:"+dt.ToString("yyyy-MM-dd HH:mm:ss"));                }                           }        }    }

第一次访问页面时,会读取当前时间,然后将其写入缓存,刷新页面你会发现,之后读取的值,来自缓存中的数据。如果要清空缓存,可以将其设置为null。

这种设置缓存的方式,是最直观也是最简单的方式。

那么我们是否可以为其设置过期时间呢?当然是可以的,下面看这样一个例子:

public partial class CacheIndex : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                DateTime dt = DateTime.Now;                //如果缓存中没有currentTime的值,则设置,否则输出缓存中的值                if (Cache["currentTime"] == null)                {                    //将当前时间存入缓存                    /*                    @第一个参数:缓存键                    @第二个参数:缓存的值                    @第三个参数:缓存依赖项,可以为null,不为其设置依赖项。                    @第四个参数:缓存时间,为30秒                    @第五个参数:缓存过期时间类型,这里是绝对过期时间,每刷新一次页面之后30秒缓存过期。                    */                    Cache.Insert("currentTime", dt, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration);                    //输出值                    Response.Write("第一次读取的时间:" + dt.ToString("yyyy-MM-dd HH:mm:ss"));                }                else                {                    //否则输出缓存中的值                    dt = (DateTime)Cache["currentTime"];                    //输出值                    Response.Write("从缓存中读取的时间:" + dt.ToString("yyyy-MM-dd HH:mm:ss"));                }            }        }    }

无法同时设置 absoluteExpiration 和 slidingExpiration 参数。如果要让缓存项在特定时间到期,可将 absoluteExpiration 参数设置为特定时间,并将 slidingExpiration(滑动过期时间) 参数设置为 NoSlidingExpiration。

如果要让缓存项在最后一次访问该项后的某段时间之后到期,可将 slidingExpiration 参数设置为到期间隔,并将 absoluteExpiration(绝对过期时间) 参数设置为 NoAbsoluteExpiration。

 总结

这里简单介绍了缓存的概念,以及举了一个缓存的例子。这里面需要对缓存中的两种过期时间好好体会,绝对过期时间和滑动过期时间。

转载于:https://www.cnblogs.com/wolf-sun/p/4715554.html

你可能感兴趣的文章
StringCollection FAQ [C#, BCL]
查看>>
Java关键字static
查看>>
使用ODP.Net 可以实现.Net 程序以SYSDBA 身份访问数据库
查看>>
JavaEE连接池泄漏问题检测Oracle数据库
查看>>
[Leetcode] Word Break
查看>>
js闭包理解
查看>>
Python之装饰器
查看>>
spcomm
查看>>
Ubuntu 下 C++ 编程起步
查看>>
TNetHTTPClient演示
查看>>
玩懂Log,打开Android大门(sundy深入浅出)之一
查看>>
Intent 和 Intent Filter
查看>>
数据挖掘中 决策树算法实现——Bash
查看>>
C#设计模式(17)——观察者模式(Observer Pattern)
查看>>
图的最大匹配算法
查看>>
topcoder srm 615 div1
查看>>
架构设计:进程还是线程?是一个问题!(转载)
查看>>
getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果
查看>>
艾伟_转载:打造优雅的Linq To SQL动态查询
查看>>
微软在Apache许可证下发布F#
查看>>