• 技术文章 >后端开发 >C#.Net教程

    .net缓存——基于文件的缓存

    黄舟黄舟2017-02-24 10:46:46原创1809

    一,.Net中的缓存基础知识

    .net中支持的两种依赖:


    CacheDependency

    SqlDependency

    表示对于文件或者目录的依赖

    表示对于SQL数据库的依赖

    过期时间


    绝对过期时间

    滑动过期时间

    一个特定的时间点,类型为DateTime

    一个时间间隔,类型为TimeSpan


    优先级 : CacheItemPriority

    由于我们需要缓存大量的数据,在内存有限的情况下,就必须对缓存的数据进行优先级分类,以便在需要的时候,将不重要的数据从缓存中移除。优先级用来指定缓存数据的重要性,重要的数据可以更长时间地保存在内存中。

    删除通知

    当被缓存的数据从内存中移除的时候,可以提供一个通知机制,来回调用户定义的方法,方法必须符合CacheItemRemovedCallback委托的定义。。

    特别注意:

    1,回调的时机是不可预知的,不能假定回调发生时,回调方法的执行线程存在HttpContext的上下文,为了在没有请求上下文的时候取得对Cache对象的引用,可以通过HttpRuntime的cache属性来使用应用程序的cache.

    2,不能在页面上使用实例方法来作为回调方法,挡在页面上使用回调方法时,由于指向回调方法的引用会阻止垃圾回收机制,因此会造成内存很快耗光。

    3,一般通过在自定义类的静态方法实现回调方法,或者使用页面对象的静态方法实现。

    二,基于文件的缓存示例

    php入门到就业线上直播课:进入学习

    首先在测试页面上加个label:

      <asp:Label Text="" runat="server" id="label1"/>

    接着,加入缓存管理类:

    <span style="font-size:14px;">namespace 基于文件的缓存依赖
    {
        public class CacheManager
        {
            public static string Message {
    
                get {
                    HttpContext context = HttpContext.Current;
    
                    //首先从缓存中获取
                    string message = context.Cache["Message"] as string;
    
                    //如果缓存中没有数据
                    if (message==null)
                    {
                        string path = context.Server.MapPath("TestFileCache.txt");
                        message = System.IO.File.ReadAllText(path);
    
                        //将信息保存到缓存中,设置响应的过期时间为1分钟
                        context.Cache.Add(
                            "Message",
                            message,
                            new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖
                            System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间
                            new TimeSpan(0, 0, 5),//缓存的时间
                            System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级
                            Callback); //过期时的回调
                        
                    }
    
                    return message;
                }
            
            }
    
    
            /// <summary>
            /// Callbacks the specified key.
            /// </summary>
            /// <param name="key">The key.</param>
            /// <param name="value">The value.</param>
            /// <param name="reason">The reason.</param>
            /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks>
            private static void Callback(
                
                string key,
                Object value,
                System.Web.Caching.CacheItemRemovedReason reason
                //原因
                ) {
    
                    if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)
                    {
                       HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期");
                        
                    }
                    }
               
            
            }
    
    }</span>

    这里,区别下cache的Add方法和Insert方法:

    在调用Add的时候,如果要加入的缓存项存在的话,则会调用失败;但是如果用insert插入,则新插入的value值会覆盖掉原来的value值。

    在webform1中,加入一行测试下:

     protected void Page_Load(object sender, EventArgs e)
            {
                    this.label1.Text = CacheManager.Message;   //获取缓存
    
            }

    可以看到已经读到文件中的内容了,因为设置的是5s后过期,所以5s后我们刷新下:

    但是多次测试我们会发现,刷新后出现过期的准确时间并不是5s,同时验证了回调的时机是不可预知的

    以上就是.net缓存——基于文件的缓存的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:.net,缓存
    上一篇:.net 流——使用流进行文件复制 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中源文件编译后生成什么文件• c语言标识符有哪些类型• C#中GDI+编程10个基本技巧二• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网